`
sqe_james
  • 浏览: 264886 次
  • 性别: 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>  

分享到:
评论

相关推荐

    spring与struts整合开发包

    6. **国际化与主题支持**:Spring和Struts整合后,可以利用Struts的国际化和主题功能,结合Spring的资源文件加载,实现全球化和界面定制。 7. **错误与异常处理**:通过Spring的AOP,可以集中处理Struts中的异常,...

    spring和struts整合的三种方案

    Spring 和 Struts 整合是企业级 Java 应用开发中常见的技术组合,它们各自在...在选择整合策略时,需要考虑项目需求、团队熟悉的技术以及对代码耦合度的控制。每种方案都有其优缺点,开发者应根据具体情况进行选择。

    Spring整合Struts

    无论是通过ContextLoaderPlugin还是继承ActionSupport类,开发者都可以根据项目的需求选择最合适的整合策略。通过利用Spring的DI和AOP特性,以及Struts的MVC架构,企业级应用的开发变得更加高效、可维护和可扩展。

    Spring+Struts2+hibernate+Redis整合

    在IT行业中,SSH(Spring、Struts2、Hibernate)是一个经典的Java Web开发框架组合,而Redis则是一个高性能的键值存储系统,常用于缓存和数据持久化。将SSH与Redis整合,可以提升应用程序的性能和响应速度。下面将...

    spring hibernate struts整合

    在Spring和Struts整合时,Spring可以作为Action的依赖注入容器,提供业务对象给Struts,从而减少代码耦合。 4. **整合过程**: - **配置Spring**:创建Spring的配置文件,如`applicationContext.xml`,定义Bean的...

    hibernate-spring-struts整合手册

    ### hibernate-spring-struts整合手册:构建三层架构的Web应用程序 #### 一、引言与目标 在《hibernate-spring-struts整合手册》中,作者Hantsy Bai旨在展示如何结合strutsMVC框架、Spring中间层以及Hibernate后端...

    ssh框架整合详细步骤(spring+struts2+hibernate)

    ##### 第二部分:Struts2与Spring进行整合 **Step08:引入Spring框架** - 添加Spring的核心类库到项目中,包括spring-core、spring-context、spring-web、spring-webmvc等。 **Step09:配置Spring容器** - 创建...

    spring整合struts.rar

    将 Spring 与 Struts 整合可以充分利用两者的优点,提供更强大的企业级应用解决方案。 整合 Spring 和 Struts 的主要目标是利用 Spring 的 IoC(Inversion of Control,控制反转)和 AOP 来管理和控制 Struts2 的...

    spring和Struts1整合

    Spring 和 Struts1 整合是企业级 Java Web 开发中的常见实践,它结合了 Spring 框架的依赖注入和事务管理能力与 Struts1 的 MVC 设计模式,为应用提供更强大的控制层和业务逻辑处理。在这个整合中,Spring 作为底层...

    Struts+Spring+Hibernate整合教程

    本文讨论的整合策略中,描述了三个框架被整合起来之后从最高层次看到的视图,形成了一个完整的架构模式。这种架构模式的特点是分层清晰,每一层都有明确的职责,层与层之间通过接口进行通信。这种设计可以有效地减少...

    struts2和spring和Hibernate整合的jar包

    5. **整合Struts2与Spring**:使用Spring-Struts2的插件,比如struts2-spring-plugin-*.jar,这样Action可以被Spring管理,实现依赖注入。在struts.xml中,通过`&lt;spring:bean&gt;`标签声明Action。 6. **处理冲突**:...

    spring管理struts和hibernate

    ### Spring管理Struts与Hibernate详解 #### 一、Spring整合Struts 在Web开发中,Struts是一个基于MVC设计模式的开源框架,它能够帮助开发者构建可维护性高、结构...对于大型复杂项目而言,这种整合策略是非常推荐的。

    spring与struts2的整合-src.zip

    在Java Web开发中,Spring和Struts2是两个非常重要的框架。Spring是一个全面的企业级应用框架,提供了依赖注入(DI)、面向切面编程(AOP)以及数据访问等多种...在实际项目中,还需要根据具体需求调整和优化整合策略。

    struts2+spring+hibernate整合策略

    ### Struts2+Spring+Hibernate整合策略 #### 一、企业应用开发的挑战与思考方式 企业级应用的开发面临着诸多挑战,其中包括但不限于业务逻辑的复杂性、系统的可扩展性、安全性和性能等方面的需求。为了应对这些...

    spring和struts2整合入门

    下面将详细讲解Spring与Struts2整合的基础知识及其应用场景。 **Spring框架** Spring是一个开源的Java平台,它简化了企业级应用的开发。其核心特性包括依赖注入(DI)和面向切面编程(AOP)。Spring框架提供了一个...

    Struts2+JPA+Spring整合(PPT)

    **Struts2、JPA与Spring的整合** 在企业级Java开发中,Struts2、JPA(Java Persistence API)和Spring框架的整合是常见的技术栈选择,它们各自扮演着不同的角色,共同构建出强大的MVC(Model-View-Controller)架构...

    spring struts2 hibernate ehcache整合

    在Spring与Struts2的整合中,Spring可以提供依赖注入,而Struts2负责处理用户交互和视图呈现。 3. **Hibernate框架**:Hibernate是一个对象关系映射(ORM)工具,它使得Java开发者可以使用对象而非SQL来操作数据库...

    eclipse实现spring+struts+hibernate整合

    在整合SSH时,Spring作为整体架构的粘合剂,负责协调Struts和Hibernate的工作。 其次,**Struts框架**是MVC(Model-View-Controller)设计模式的实现,主要用于处理HTTP请求和响应。Struts提供了一套完整的控制器...

    Struts2与Spring之间的整合方法与原理

    Struts2与Spring之间的整合是企业级应用中常见的技术组合,因为它们分别提供了优秀的MVC框架支持和依赖注入(DI)及面向切面编程(AOP)能力。整合这两个框架可以使开发更加灵活,同时利用Spring的管理功能来增强...

    开发Spring+Struts+Hibernate应用

    - 原理探索:通过模拟Action代理类,了解Spring与Struts整合的原理。 #### 15. 总结和练习 - 本章知识点回顾:总结SSH整合开发的核心知识点。 - 思考与练习:提供相关问题和练习,帮助读者加深理解和运用。 以上...

Global site tag (gtag.js) - Google Analytics