




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Struts2 配置详解-实例,,学员的潜力,青软的动力,Struts2框架主要配置文件,web.xml,1 过滤器配置:路径一般使用/*, 问题:但是当请求servlet及dwr框架等时,也都被struts框架过滤了,请求根本到不了dwr框架或者servlet 解决方案在struts.xml中配置不经过struts过滤的路径: 2 如果使用*.action 问题:则页面上使用了struts标签后会发生异常: The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. 解决方案再配置*.jsp经过struts过滤器 *.action *.jsp,struts.xml和perties,struts.xml文件主要负责管理应用中的action映射,以及该Action中包含的result定义等。 perties通常放在WEB应用下的WEB-INF/classes路径下。 其实,perties的内容均可在struts.xml中以加载,多个struts配置文件,通过包含其他配置文件,就可以将Struts 2的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=$name test.jsp中能接受到name参数值 如果name值为中文需要编码解码处理 TestAction中编码:name=URLEncoder.encode(“青软”,”GBK”); test.jsp中解码:URLDecoder.decode(new String(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.jsp reg.jsp index.jsp login.jsp ,当请求/reg时,首先查找addUser()方法,找不到则继续查找名为doAddUser() 的方法,动态方法调用(Dynamic Method Invocation,DMI),如果Action中存在多个方法时,我们可以使用!+方法名调用指定方法 禁用动态方法调用 ,public class HelloWorldAction private String message; public String execute() throws Exception public String other() throws Exception ,/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方法。, hello qingsoft /hello.jsp ,Action如何接收请求参数,Test.action?id=123 Action中加上属性id以及setter方法来接收 Test.action?userinfo.id=123 Action中加上属性userinfo来接收 直接注入生成数据对象 Action中可以使用private Userinfo userinfo;,ModelDriven接口,public class UserinfoAction extends ActionSupport implements ModelDriven private Userinfo userinfo=new Userinfo(); public Userinfo getUserinfo() System.out.println(“getUserinfo“); return userinfo; public String login() throws Exception System.out.println(“login.“+userinfo.getName(); return “index“; Override public Userinfo getModel() return userinfo; ,获得Servlet各种对象,ActionContext.getContext().getSession()=Map ActionContext.getContext().getApplication()=Map ServletActionContext.getRequest()=HttpServletRequest ServletActionContext.getResponse()=HttpServletResponse ServletActionContext.getServletContext(),获得Servlet各种对象,RequestAware public void setRequest(Map arg0) SessionAware public void setSession(Map arg0) ApplicationAware public void setApplication(Map arg0) ServletContextAware public void setServletContext(ServletContext arg0 ServletRequestAware public void setServletRequest(HttpServletRequest arg0) ServletResponseAware public void setServletResponse(HttpServletResponse arg0),错误处理,default-action-r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 进口水果网上营销方案
- 2025注册会计师考试《税法》考试题及答案
- 2025年湖南省一级建造师之一建港口与航道工程实务真题附答案
- 2025年反洗钱竞赛复习试题含答案
- 气体净化工主管竞选考核试卷及答案
- 2025年东莞市招聘事业编制教师广州专场模拟试卷含答案详解(培优)
- 2025年智慧花朵英语题库及答案
- 服装材料考研真题及答案
- 环氧乙烷(乙二醇)装置操作工适应性考核试卷及答案
- 煤质化验笔试试题及答案
- 中华人民共和国统计法
- 热电厂输煤作业安全培训
- 形成性评价指导性规范:SOAP病例汇报评价
- 燃料电池+基础理论动力学+热力学+研究方法
- 高等数学教材(文科)
- 歌词:半生雪(学生版)
- 九江学院学位英语往年考题
- 药品不良反应培训试题
- 2024-2030年中国纳米晶软磁材料行业市场发展趋势与前景展望战略分析报告
- 五级保健按摩师(初级)职业技能鉴定考试题库-下(判断题)
- JBT 6064-2015 无损检测 渗透试块通.用规范
评论
0/150
提交评论