




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
现在书写strutsconfig.xml文件: applicationContext.xml配置文件: 需要说明的是,由于spring dtd规定id不能有/,所以我们用name定义path,并且,spring bean的name要和struts-config.xml中的path一致使用DelegatingActionProxy的好处就在于你可以用不用任何spring特定的类编写Struts Action,这个方法也有不足之处,就是不太直观,因为所有路径都映射到同一个类了对于这种情况,spring也有解决方法,就是使用请求委托首先,为struts-config.xml增加controller 然后,修 改我们的path定义位 这样,又和我们单独使用struts的时候一样了,但内部还是让spring取代理我们的真正的action需要说明的是,这里的type其实是个摆设,完全可以使用 ,写上是为了解决我们上面提到的“不够直观的”的问题spring与struts1.2怎么整合01 先在struts-config.xml的最后添加插件配置代码=02 把struts-config.xml中的action的type改为 type=org.springframework.web.struts.DelegatingActionProxy当然你也可以添加controller备注: 添加controller在 的后面,这样就不用不用写type属性 03 在applicationContext.xml中添加action的代码,也就是配置spring 来实例化上一步中被删除的 Action 类.Spring 通过 org.springframework.web.struts.DelegatingActionProxy 这个类, 然后根据动态获取的请求路径 /login(通过在 execute(form,request,reponse) 中调用 HttpServletRequest.getRequestURI() 来获取) 和 Spring 配置文件中的 来将 Spring 管理下的 Struts Action 类和提交的路径匹配起来, 这些就是关于转交控制权的配置内容. 最后调用用户自己开发的 Action 并返回来完成业务逻辑.spring2.0与struts1.x 整合三种方法! 1. Struts Struts 是 应用最广的 Java Web 开发框架,主要是因为它是最先发行的几个框架之一(2001年6月)。这个框架由 Craig McClanahan 开发完成,现在作为 Apache 软件基金会的一个开源项目。 当时,它极大地简化了 JSP/Servlet 编程范例并且赢得了 大多数正在使用私人框架的开发人员的亲睐。它简化了编程模型,它是开源的,它具有一个庞大的社区,这些都使得这个项目快速成长,同时变得越来越流行。 要将 Struts 与 Spring 集成,你有两个选择: 一:配置 Spring 将 Action 作为 bean 托管,使 用 ContextLoaderPlugin, 并且在 Spring context中设置依赖关系。 二:继承 Spring 的 ActionSupport 类并且 使用getWebApplicationContext() 方法获取 Spring 管理的 bean。 1.1. ContextLoaderPlugin ContextLoaderPlugin 是 Struts 1.1+ 的插件,用来为 Struts 的 ActionServlet 加载 Spring context文件。 这个context引用 WebApplicationContext (由 ContextLoaderListener 加载) 作为它的父类。默认的context文件是映射的 Servlet 的名字,加上 -servlet.xml后缀。 如果 ActionServlet 在 web.xml 里面的定义是 action, 那么默认的文件就是 /WEB-INF/action-servlet.xml。 要配置这个插件,请把下面的 XML 贴到 struts-config.xml 文件中 plug-ins 部分的底端: context配置文件的位置可以通过 contextConfigLocation属性来自定义。 Xml代码 复制代码 你也可以使用这个插件加载所有的配置文件,这在使用测试工具(例如 StrutsTestCase)的时候特别有用。 StrutsTestCase 的 MockStrutsTestCase 不会在启动的时候初始化 Listener,将你所有的配置文件放在plug-in里面是一种解决方案。(有个 已记录的 bug 就是针对这个问题的,但是已经被标记为“无须改正”)。 在 struts-config.xml 中配置好插件以后,你可以配置Sping来管理 Action。Spring (1.1.3以后的版本) 提供下面两种方式: 一:用 Spring 的DelegatingRequestProcessor重载 Struts 默认的 RequestProcessor 。 二:将 的 type 属性设为 DelegatingActionProxy。 这两种方法都允许你在 action-context.xml 文件中管理你的 Action 以及依赖关系。 连接 struts-config.xml 和 action-servlet.xml 中的 Action 的桥梁 是 action-mapping 的“path”和 bean 的“name”。如果你在 struts-config.xml 文件中有如下配置: 你必须在 action-servlet.xml 中将 Action bean 的名字定义为 “/users” 1.1.1. DelegatingRequestProcessor 为了在 struts-config.xml 文件中配置 DelegatingRequestProcessor,你需要重载 元素的 “processorClass” 属性。 下面的几行应该放 在 元素的后面。 Xml代码 增加这些设置之后,不管你查询任何类型的 Action,Sping都自动在它的context配置文件中寻找。 实际上,你甚至不需要指定类型。下面两个代码片断都可以工作: 如果你使用 Struts 的 modules 特性,你的 bean 命名必须含有 module 的前缀。 举个例子,如果一个 Action 的定义为 ,而且它的 module 前缀为“admin”, 那么它应该对应名为 的 bean。 Note 如果你在 Struts 应用中使用了 Tiles,你需要配置 为 DelegatingTilesRequestProcessor。 1.1.2. DelegatingActionProxy 如果你有一个自定义的 RequestProcessor 并且不能够使用 DelegatingRequestProcessor 或者 DelegatingTilesRequestProcessor,你可以使用 DelegatingActionProxy 作为你 action-mapping 中的类型。 Xml代码 复制代码 action-servlet.xml 文件中的bean定义依然不变,不管你使用了自定义的 RequestProcessor 还是 DelegatingActionProxy。 如果你把 Action 定义在Spring的context文件里,那么 Spring bean 容器的所有特性都可用了:比如,依赖注入,再比如,为每个请求初始化一个新的 Action 实例。 如果要使用这个特性, Action bean 定义中需要声明scope=prototype。 Xml代码 复制代码 1.2. ActionSupport 类 需要在web.xml里面加载spring配置文件如: contextConfigLocation /WEB-INF/classes/applicationContext*.xml 正如前面提到的,你可以使用 WebApplicationContextUtils 类从 ServletContext 中获得 WebApplicationContext 。 另一个简单的办法是继承 Spring 的 Action 类。举个例子,除了继承 Struts 的 Action 之外,你也可以继承 Spring 的 ActionSupport 类。 ActionSupport 类提供了一些便利的方法,例如 getWebApplicationContext()。 下面的例子展示了如何在 Action 中使用它: Java代码 复制代码 1. public class UserAction extends DispatchActionSupport 2. 3. public ActionForward execute(ActionMapping mapping, 4. ActionForm form, 5. HttpServletRequest request, 6. HttpServletResponse response) throws Exception 7. if (log.isDebugEnabled() 8. log.debug(entering delete method.); 9. 10. WebApplicationContext ctx = getWebApplicationContext(); 11. UserManager mgr = (UserManager) ctx.getBean(userManager); 12. / talk to manager for business logic 13. return mapping.findForward(success); 14. 15. public class UserAction extends DispatchActionSupport public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception if (log.isDebugEnabled() log.debug(entering delete method.); WebApplicationContext ctx = getWebApplicationContext(); UserManager mgr = (UserManager) ctx.getBean(userManager); / talk to manager for business logic return mapping.findForward(success); Spring 包含了所有标准 Struts Action 的子类 - Spring 版本在类名末尾附加了 Support: ActionSupport, DispatchActionSupport, LookupDispatchActionSupport MappingDispatchActionSupport 你应该选择最适合你项目的集成方式。继承使得你的代码更可靠,并且你确切地知道依赖关系是如何被解析的。 另一方面,使用 ContextLoaderPlugin 允许你方便地在context XML 文件里面增加新的 依赖关系。这两种集成方法,不管哪一种 Spring 都提供了相当好用的选项。整合方式:将动作管理委托给 Spring将Struts的动作管理委托给Spring.使用Struts-config.xml的动态映射中注册一个代理.代理负责在Spring中找到Struts的动作.由于动作在Spring的控制之下.所以Spring可以对Action进行javaBean的注入和Spring的一些Aop使用需要发生改变的配置有:Struts-config.xml:Java代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 17. 18. 20. 22. Action中的代码:Java代码 1. publicclassUserActionextendsMappingDispatchAction 2. /使用普遍依赖注入方式 3. UserServiceuserService; 4. publicvoidsetUserService(UserServiceuserService) 5. this.userService=userService; 6. 7. publicActionForwardlogin(ActionMappingmapping,ActionFormform, 8. HttpServletRequestrequest,HttpServletResponseresponse) 9. throwsException 10. Stringuname=request.getParameter(uname); 11. Stringupass=request.getParameter(upass); 12. /直接使用userService 13. Useruser=userService.findByName(uname,upass); 14. if(user=null) 15. request.setAttribute(error,对不起,您输入的用户名或者密码错误!); 16. 17. returnmapping.findForward(failure); 18. else 19. request.getSession().setAttribute(user,user); 20. returnmapping.findForward(success); 21. 22. 23. 24. public class UserAction extends MappingDispatchAction /使用普遍依赖注入方式 UserService userService; public void setUserService(UserService userService) this.userService = userService; public ActionForward login(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception String uname = request.getParameter(uname); String upass = request.getParameter(upass); /直接使用userService User user = userService.findByName(uname, upass); if (user=null) request.setAttribute(error, 对不起,您输入的用户名或者密码错误!); return mapping.findForward(failure); else request.getSession().setAttribute(user, user); return mapping.findForward(success); 这个配置只于传统的struts-config的配置.这里使用的是Spring的注册代理.而不是直接使用相应Action类的完整类名.这里使用的ContextLoaderPlugIn.声明的环境。通过DelegatingActionProxy使用动作映射名/login在Spring环境中找到相应的Action.所以我们需要在Spring环境中注册一个Struts的动作:Java代码 1. 2. 3. 这个方法可以说是多数人认可最好的方法:这个方法的使用只在配置文件中着手不需要对源码进行修改.将struts动作放置到Spring中使得其享受了Spring提供的各种好处.一旦让 Spring 控制您的 Struts 动作,您就可以使用 Spring 给动作补充更强的活力。例如,没有 Spring 的话,所有的 Struts 动作都必须是线程安全的。如果您设置 标记的 singleton 属性为“false”,那么不管用何种方法,您的应用程序都将在每一个请求上有一个新生成的动作对象。您也可以利用 Spring 的生命周期方法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环保包装材料在能量饮料的应用-洞察阐释
- 北京卫生职业学院《水利专业英语》2023-2024学年第二学期期末试卷
- 北京石油化工学院《环境生物技术原理》2023-2024学年第二学期期末试卷
- 社会保障中的性别平等与女性发展权益-洞察阐释
- 2025年储能技术多元化在储能系统行业人才培养中的应用报告
- 北京经贸职业学院《古典钢琴欣赏与实践》2023-2024学年第二学期期末试卷
- 2025年冰雪旅游项目投资回报率与可行性评估报告
- 生物●河北卷丨2024年河北省普通高中学业水平选择性考试生物试卷及答案
- 教育培训机构资料TOEIC FAQ
- 2025年保险数字化理赔服务智能理赔服务平台构建与运营报告
- 简单零件钳加工完整版课件
- 眼耳鼻喉口腔科说课PPT
- 过滤器设计计算书
- 新一代寄递平台投递PC(课堂PPT)
- SH3508-2011附录A填写示例
- 机械设计外文文献翻译、中英文翻译、外文翻译
- 中山大学南方学院互联网 大学生创新创业大赛评分表
- 保险精算业中英翻译术语及表达式词库
- 一次函数应用题
- 英语课题评审书
- 江苏大学自主招生考试综合素质测试面试试题答题技巧汇总
评论
0/150
提交评论