Struts2-配置详解-实例.ppt_第1页
Struts2-配置详解-实例.ppt_第2页
Struts2-配置详解-实例.ppt_第3页
Struts2-配置详解-实例.ppt_第4页
Struts2-配置详解-实例.ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Struts2配置详解-实例,学员的潜力,青软的动力,Struts2框架主要配置文件,web.xml,1过滤器配置:路径一般使用/*,问题:但是当请求servlet及dwr框架等时,也都被struts框架过滤了,请求根本到不了dwr框架或者servlet解决方案在struts.xml中配置不经过struts过滤的路径:2如果使用*.action问题:则页面上使用了struts标签后会发生异常:TheStrutsdispatchercannotbefound.ThisisusuallycausedbyusingStrutstagswithouttheassociatedfilter.解决方案再配置*.jsp经过struts过滤器*.action*.jsp,struts.xml和perties,struts.xml文件主要负责管理应用中的action映射,以及该Action中包含的result定义等。perties通常放在WEB应用下的WEB-INF/classes路径下。其实,perties的内容均可在struts.xml中以加载,多个struts配置文件,通过包含其他配置文件,就可以将Struts2的Action按模块添加在多个配置文件中。,还可以使用通配符把多个配置文件包含进来,struts.xml配置说明,package管理一组功能相关的Action,将action分成逻辑上的不同模块,每一个模块有自己独立的前缀,可以有效的避免action重名的冲突name属:唯一的任意名,和java类包不对应,如果其它包继承自该包,则需引用该属性namespace属性:定义该包的命名空间,作为该包下的Action的路径的一部分,如访问上面的Action,访问路径为:/test/helloworld.action。如果不配置默认的命名空间为“”。extends:继承自struts-default包,大部分核心功能都在struts-default.xml中进行了定义,比如各种拦截器:文件上传、数据验证、数据注入到action等及各种Result类型。struts-default.xml也是Struts2默认配置文件。Struts2每次都会自动加载struts-default.xml文件。,Action中result的各种转发类型,struts2中提供了多种结果类型,常用的类型有:dispatcher(默认值)、redirect、redirectAction。dispatcher转发redirect重定向redirectAction重定向到其他action,如果重定向的action中同一个包下:helloworld如果重定向的action在别的命名空间下:helloworld/test,在result中还可以使用$属性名表达式访问action中的属性,表达式里的属性名对应action中的属性。如下:view.jsp?id=$id,Action中result的各种转发类型,viewCampaignDetail$campaignId,redirectAction重定向到其他action时,传递参数,全局result配置,当多个action中都使用到了相同视图,这时我们应该把result定义为全局视图,/message.jsp,result传递参数,可以通过el表达式访问action中的属性,如:TestAction中有id属性,返回test结果/test.jsp?name=$nametest.jsp中能接受到name参数值如果name值为中文需要编码解码处理TestAction中编码:name=URLEncoder.encode(“青软”,”GBK”);test.jsp中解码:URLDecoder.decode(newString(request.getParameter(“name”).getBytes(“ISO-8859-1”),”GBK”),”GBK”);,调用acton中不同的方法,为了节省action类的数量,通常是在一个action类中编写四个方法来实现CRUD操作在执行action时,默认调用方法是execute()如何才能让框架在不同的请求到来时,去调用Action中的相应方法呢?使用method属性动态方法调用(DMI)通配符配置,使用method属性,action元素的method属性来指定action调用的方法。所指定的方法必须遵循与execute方法相同的格式。可以为同一个action类配置不同的别名,并使用method属性根据method属性查找方法时有两种途径:1)查找与method属性值完全一致的方法2)查找doMethod()形式的方法。,index.jspreg.jspindex.jsplogin.jsp,当请求/reg时,首先查找addUser()方法,找不到则继续查找名为doAddUser()的方法,动态方法调用(DynamicMethodInvocation,DMI),如果Action中存在多个方法时,我们可以使用!+方法名调用指定方法禁用动态方法调用,publicclassHelloWorldActionprivateStringmessage;.publicStringexecute()throwsExceptionpublicStringother()throwsException,/struts/test/helloworld!other.action,/struts/test/helloworld.action,DMI的实现本质是,其实现代码扫描action名字中的“!”字符,如果找到,则“欺骗”框架来调用“!”字符后的方法,而非execute方法。,DMI还是method属性?,DMI可能会带来安全隐患,由于通过URL可以执行action中的任意方法,恶意的用户会利用这一特性来执行一些敏感的方法,即使你不想这些方法被执行。所以在确定使用DMI时,你应该确保Action中的方法都是普通、开放的方法;否则,你应该加上安全控制。其次,DMI与下一节要介绍的通配符方法有所重叠。如何选择?如果同一个Action的不同方法使用的是相同的配置(同样的拦截器引用,同样的result映射),那么可以使用动态方法调用;如果不同的方法调用需要配置不同的拦截器引用、不同的result映射,那么可以使用action元素的method属性,为同一个Action配置多个别名。,使用通配符定义action,如果对Action中方法的调用满足一定的规律,如edit.Action对应edit方法,delete.Action对应delete方法,可以使用方法通配符通配符表达式是/edit*/add*/confirm*,它匹配上了/editOrder/addItem/confirmResult,那么1就代表Order,2就代表Item,3就代表Result,依此类推,另外一种比较常用的方式是使用下划线分割/WEB-INF/page/hello.jsp,访问other方法:/test/helloworld_edit.action调用edit方法,editCrud.Action的引用将调用edit方法deleteCrud.Action的引用将调用delete方法。,使用通配符定义action,通配符应用/WEB-INF/pages/hello/2.jsp请求http:/localhost:8080/项目名/namespace/sayHello_hello,执行sayHello方法,显示hello.jsp页面。一般都只用一个“*”,然后方法名和视图名相同。也可以用“*”定义目录名,例如/WEB-INF/pages/2/view.jsp。,Action属性值注入,Struts2为Action中的属性提供了依赖注入功能,属性必须提供setter方法。,helloqingsoft/hello.jsp,Action如何接收请求参数,Test.action?id=123Action中加上属性id以及setter方法来接收Test.action?userinfo.id=123Action中加上属性userinfo来接收直接注入生成数据对象Action中可以使用privateUserinfouserinfo;,ModelDriven接口,publicclassUserinfoActionextendsActionSupportimplementsModelDrivenprivateUserinfouserinfo=newUserinfo();publicUserinfogetUserinfo()System.out.println(getUserinfo.);returnuserinfo;publicStringlogin()throwsExceptionSystem.out.println(login.+userinfo.getName();returnindex;OverridepublicUserinfogetModel()returnuserinfo;,获得Servlet各种对象,ActionContext.getContext().getSession()=MapActionContext.getContext().getApplication()=MapServletActionContext.getRequest()=HttpServletRequestServletActionContext.getResponse()=HttpServletResponseServletActionContext.getServletContext(),获得Servlet各种对象,RequestAwarepublicvoidsetRequest(Maparg0)SessionAwarepublicvoidsetSession(Maparg0)ApplicationAwarepublicvoidsetApplication(Maparg0)ServletContextAwarepublicvoidsetServletContext(ServletContextarg0ServletRequestAwarepublicvoidsetServletRequest(HttpServletRequestarg0)ServletResponseAwarepublicvoidsetServletResponse(HttpServletResponsearg0),错误处理,default-action-re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论