`
sqe_james
  • 浏览: 262098 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring与Struts的整合策略

    博客分类:
  • J2EE
阅读更多

思想:将获取业务逻辑组件的方式放在父类中实现,而其余的Action则从父类中获取。

采用这个策略的优势:

  • 可在不同整合策略中自由切换
  • 避免重复创建DelegatingActionProxy实例
  • 使业务Action避免代码污染

下面举个例子来诠译这种整合方式,首先是BaseAction的源代码:

java 代码
  1. public class BaseAction extends ActionSupport
  2. {
  3. public Object getBean(String beanName)
  4. {
  5. return getWebApplicationContext().getBean(beanName);
  6. }
  7. }

该父类仅将ActionSupport的方法再次包装,但产生的优势非常明显,至少可以在实际业务Action中避免调用getWebApplicationContext方法。下面是业务Action的源代码:

java 代码
  1. //新的业务控制器,继承BaseAction类
  2. public class LoginAction extends BaseAction
  3. {
  4. //将一个ValidBean作为成员变量
  5. private ValidBean vb;
  6. public LoginAction()
  7. {
  8. System.out.println("------------");
  9. }
  10. //完成ValidBean的初始化
  11. public void setVb()
  12. {
  13. vb = (ValidBean)getBean("vb");
  14. }
  15. //必须重写该核心方法,该方法actionForm将表单的请求参数封装成值对象
  16. public ActionForward execute(ActionMapping mapping,
  17.                              ActionForm form,
  18.                              HttpServletRequest request,
  19.                              HttpServletResponse response)throws Exception
  20. {
  21. LoginForm loginForm = (LoginForm)form;
  22. String username = loginForm.getUsername();
  23. String pass = loginForm.getPass();
  24. setVb();
  25. //下面作服务器端的数据校验
  26. String errMsg = "";
  27. if (username == null || username.equals(""))
  28. {
  29. errMsg += "您的用户名丢失或没有输入,请重新输入";
  30. }
  31. else if(pass == null || pass.equals(""))
  32. {
  33. errMsg += "您的密码丢失或没有输入,请重新输入";
  34. }
  35. else
  36. {
  37. if (vb.valid(username,pass))
  38. {
  39. return mapping.findForward("welcome");
  40. }
  41. else
  42. {
  43. errMsg = "您的用户名和密码不匹配";
  44. }
  45. }
  46. if (errMsg != null && !errMsg.equals(""))
  47. {
  48. request.setAttribute("err" , errMsg);
  49. return mapping.findForward("input");
  50. }
  51. else
  52. {
  53. return mapping.findForward("welcome");
  54. }
  55. }
  56. }

从代码中可看出,在实际的业务控制器Action中,完全从Spring的API中分离出来,从而可以避免代码污染。

另外,还有一个最大的好处:实际的业务Action并没有与任何的整合策略耦合。假如需要在不同的整合策略之间切换,其业务Action完全不需要改变。

假设需要将整合策略切换到得用Spring IOC特性,则只需将BaseAction改成如下形式:

java 代码
  1. public class BaseAction   
  2. {  
  3.     //业务逻辑组件  
  4.     Object serviceObj;  
  5.     //依赖注入必需的setter方法  
  6.     public void setServiceObj(Object obj)  
  7.     {  
  8.         this.serviceObj = obj;  
  9.     }  
  10.     /** 
  11.       *根据beanName获取容器中的bean实例 
  12.       */  
  13.       public Object getBean(String beanName)  
  14.     {  
  15.           return serviceObj:  
  16.     }  
  17. }  
从代码中可以看出,BaseAction等待容器依赖注入。当BaseAction的子类调用getBean方法时,传入的baseName完全没有作用。因为使用了Spring的依赖注入,Action与业务逻辑组件之间的依赖关系可通过配置文件来设定。

下面的示例采用这种整合策略,而Spring管理Action则采用DelegatingRequestProcessor策略。其struts-config.xml和actionServlet的配置文件如下:

xml 代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2.   
  3. <!DOCTYPE struts-config PUBLIC  
  4.           "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"  
  5.           "http://struts.apache.org/dtds/struts-config_1_2.dtd">  
  6.   
  7. <struts-config>  
  8.     <form-beans>  
  9.         <form-bean name="loginForm" type="cn.LoginForm"/>  
  10.     </form-beans>  
  11.   
  12.     <action-mappings>  
  13.         <!--这里只定义了一个action,而且没有指定该action的type元素-->  
  14.         <action path="/login" name="loginForm"  
  15.             scope="request" validate="true" input="/login.jsp" >  
  16.             <forward name="input" path="/login.jsp"/>  
  17.             <forward name="welcome" path="/welcome.html"/>  
  18.         </action>  
  19.     </action-mappings>  
  20.   
  21.     <!--使用DelegatingRequestProcessor替换RequestProcessor-->  
  22.     <controller 
  23. processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>
  24.     <message-resources parameter="mess"/>  
  25.   
  26.      <!-- 装载验证的资源文件-->  
  27.     <plug-in className="org.apache.struts.validator.ValidatorPlugIn">  
  28.         <set-property property="pathnames"
  29. value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />  
  30.         <set-property property="stopOnFirstError" value="true"/>  
  31.     </plug-in>  
  32.   
  33.     <!-- 装载Spring配置文件,随同应用启动创建ApplicationContext实例-->  
  34.     <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">  
  35.         <set-property property="contextConfigLocation"   
  36.             value="/WEB-INF/applicationContext.xml,  
  37.                    /WEB-INF/action-servlet.xml"/>  
  38.     </plug-in>  
  39.   
  40. </struts-config>  

action-servlet的配置文件如下:

xml 代码
 
  1. <?xml version="1.0" encoding="GB2312"?>  
  2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"  
  3.     "http://www.springframework.org/dtd/spring-beans.dtd">  
  4.   
  5. <beans>  
  6.     <!--每个request请求产生新实例,所以将action配置成non-singleton-->  
  7.     <bean name="/login" class="lee.LoginAction" singleton="false">  
  8.        <!--配置依赖注入-->  
  9.         <property name="vb">  
  10.             <ref bean="vb"/>  
  11.         </property>  
  12.     </bean>  
  13. </beans>  

分享到:
评论

相关推荐

    struts2+spring+hibernate整合策略

    struts2+spring+hibernate整合策略 struts2+spring+hibernate整合策略

    Struts+Spring+Hibernate整合教程

    本文还讨论整合 3 种著名开源框架的一种策略。对表现层, 我们使用 Struts;业务层使用 Spring;对于持久层我们使用的是 Hibernate。你尽可以取代这里的某个 框架而使用你喜欢的框架已达到同样的效果。图 1 显示了...

    轻量级 J2EE 企业应用实战:Struts+Spring+Hibernate 整合开发 2/2

    共两卷:1、J2EE应用运行及开发环境的安装与配置2、传统表现层jsp3、经典mvc框架struts4、试用hibernate完成持久化5、spring介绍6、spring与hibernate正好7、spring与struts整合8、企业应用开发的思考与策略9、完整...

    轻量级 J2EE 企业应用实战:Struts+Spring+Hibernate 整合开发 1/2

    共两卷:1、J2EE应用运行及开发环境的安装与配置2、传统表现层jsp3、经典mvc框架struts4、试用hibernate完成持久化5、spring介绍6、spring与hibernate正好7、spring与struts整合8、企业应用开发的思考与策略9、完整...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器中使用Hibernate的注意点 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO...

    Spring 2.0 开发参考手册

    17. 使用Spring进行远程访问与Web服务 17.1. 简介 17.2. 使用RMI暴露服务 17.2.1. 使用 RmiServiceExporter 暴露服务 17.2.2. 在客户端链接服务 17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为...

    spring in action英文版

     4.4 用Spring整合Hibernate  4.4.1 Hibernate概览  4.4.2 管理Hibernate资源  4.4.3 用HibernateTemplate访问Hibernate  4.4.4 HibernateDaoSupport的子类  4.5 Spring和JDO  4.5.1 配置JDO ...

    基于SSH的Web应用开发

    分析了Hibernate和Spring整合实现持久层和服务层,以及Spring和Struts的整合实现WEB层,提出了一种基于SSH的web应用开发策略。在这种策略中,可大大降低代码的耦合性以及提高系统的开发效率。

    Spring中文帮助文档

    12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器中使用Hibernate的注意事项 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于...

    spring chm文档

    17. 使用Spring进行远程访问与Web服务 17.1. 简介 17.2. 使用RMI暴露服务 17.2.1. 使用 RmiServiceExporter 暴露服务 17.2.2. 在客户端链接服务 17.3. 使用Hessian或者Burlap通过HTTP远程调用服务 17.3.1. 为...

    Spring API

    12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用服务器中使用Hibernate的注意事项 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于...

    Java Web程序设计教程

    第14章spring与struts2、hibernate框架的整合基础 277 14.1spring与struts2的整合方式 277 14.1.1struts2应用的扩展方式 277 14.1.2spring插件的应用 278 14.2spring和hibernate的整合 279 14.2.1spring对...

    低清版 大型门户网站是这样炼成的.pdf

    (Struts 2+Spring 2+Hibernate 3).pdf(完整版) 网上有高清版350M的。可以去下 http://115.com/file/be5gwid8 请于下载后 24H 内及时删除!请抱着学习的态度下载此资料。 总共900多页!!!!!!! 第1篇 ...

    J2EE 企业应用实战

    第一章:J2EE环境安装与配置 第二章:传统表现层jsp 第三章:MVC struts ...第七章:spring struts 整合 第八章:企业应用开发的思考与策略 第九章:完整实例:消息发布系统 第十章:完整应用:简单工作流系统

    Java_EE企业应用实战SSH(第3版)-part2

    尤其适合于对Struts2、Spring、Hibernate了解不够深入,或对Struts2+Spring+Hibernate整合开发不太熟悉的开发人员阅读。 作者简介 李刚,从事10年的JavaEE应用开发。曾任LITEON公司的J2EE技术主管,负责该公司的...

    Java_EE企业应用实战SSH(第3版)-part1

    尤其适合于对Struts2、Spring、Hibernate了解不够深入,或对Struts2+Spring+Hibernate整合开发不太熟悉的开发人员阅读。 作者简介 李刚,从事10年的JavaEE应用开发。曾任LITEON公司的J2EE技术主管,负责该公司的...

    Java_EE企业应用实战SSH(第三版)-part3

    尤其适合于对Struts2、Spring、Hibernate了解不够深入,或对Struts2+Spring+Hibernate整合开发不太熟悉的开发人员阅读。 作者简介 李刚,从事10年的JavaEE应用开发。曾任LITEON公司的J2EE技术主管,负责该公司的企业...

    达内java培训目录

    熟练掌握Spring与其他组件的整合技术。• 实训项目五:企业级应用"航空订票"系统开发 1.开班前 5天训练营将完成"捕鱼达人"游戏项目 2.开班 2周内,贯穿着 Java 语言基础及 Java 面向对象的学习,学员将完成专业...

    java面试题库2021.pdf

    ①MVC 模式与 Struts 体系 4、 mybatis 5、 MVC 框架 6、 各框架对比与项目优化 7、 JPA ①EJB 三、 Java web 开发核心内容 1、 web 编程基础 ①Tomcat 服务器NOWCODER.COM 牛客网——互联网学习求职必备神器 名企...

Global site tag (gtag.js) - Google Analytics