`

struts与spring 的整合

阅读更多

Struts与Spring整合方法之一- -

                                      

 

   最近用Struts,Spring做了一个程序,看了很多这方面的资料和代码。这篇是对Struts和Spring协同工作所需要做的工作的总结。

   Struts和Spring协同工作有两种方法:
1.   一种是在Struts的Action中直接调用Spring的Bean;(就是原来一个路径对一个action的方法)

2.  另一种方式是将Struts的Action作为Spring Beans,由Spring进行管理。


要使StrutsSpring协同工作需要修改Struts的配置文件struts-config.xmlSpring的配置文件applicationContext.xml

修改struts-config.xml

xml 代码
  1. <struts-config>  
  2.   
  3. <plug-in  
  4.   
  5. className="org.springframework.web.struts.ContextLoaderPlugIn">  
  6.   
  7. <set-property property="contextConfigLocation"  
  8.   
  9. value="/WEB-INF/applicationContext.xml" />  
  10.   
  11. </plug-in>  
  12.   
  13. </struts-config>  

通过

xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts    
  4.   
  5.   Configuration 1.2//EN"    
  6.   
  7.   "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">  
  8.   
  9. <struts-config>  
  10.   
  11.   <!-- ================ Form Bean Definitions ================-->  
  12.   
  13.   <form-beans>  
  14.   
  15.       <form-bean name="userForm"    
  16.   
  17.           type="org.apache.struts.validator.DynaValidatorForm">  
  18.   
  19.           <form-property name="user" type="org.appfuse.model.User"/>  
  20.   
  21.       </form-bean>  
  22.   
  23.   </form-beans>  
  24.   
  25.   <!-- ================ Action Mapping Definitions ================-->  
  26.   
  27.   <action-mappings>  
  28.   
  29.       <action path="/user"    
  30.   
  31.           type="org.springframework.web.struts.DelegatingActionProxy"    
  32.   
  33.           name="userForm" scope="request" parameter="method" validate="false">  
  34.   
  35.           <forward name="list" path="/userList.jsp"/>  
  36.   
  37.           <forward name="edit" path="/userForm.jsp"/>  
  38.   
  39.       </action>  
  40.   
  41.   </action-mappings>  
  42.   
  43. <!--  <action-mappings>  
  44.   
  45.       <action path="/user"    
  46.   
  47.           type="com.ctbr.springtest.web.action.UserAction"    
  48.   
  49.           name="userForm" scope="request" parameter="method" validate="false">  
  50.   
  51.           <forward name="list" path="/userList.jsp"/>  
  52.   
  53.           <forward name="edit" path="/userForm.jsp"/>  
  54.   
  55.       </action>  
  56.   
  57.   </action-mappings>-->  
  58.   
  59.   <!-- ================= Plug Ins Configuration ================-->  
  60.   
  61.   <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">  
  62.   
  63.       <set-property property="contextConfigLocation"    
  64.   
  65.           value="/WEB-INF/applicationContext.xml,   
  66.   
  67.                    /WEB-INF/action-servlet.xml"/>  
  68.   
  69.   </plug-in>  
  70.   
  71. </struts-config>  

Action配置上也需要做修改,

我们试图在action-mapping 中增加一个名为userFormAction,传统方式中,直接将类名作为action节点的type属性,Struts将根据type中的类名加载对应的Action实例。

而在面向SS组合的配置方式中,我们用Spring提供的DelegatingActionProxy 作为Actiontype属性。DelegatingActionProxy同样是org.apache.struts.action.Action的一个子类,它将把调用请求转交给真正的Action实现。下面是DelegatingActionProxyexecute方法代码:

public ActionForward execute(

ActionMapping mapping,

ActionForm form,

HttpServletRequest request,

HttpServletResponse response)

throws Exception {

//获得实际的Action实例,并将请求转交

Action delegateAction = getDelegateAction(mapping);

return delegateAction.execute(mapping, form, request, response);

}

如此一来,Struts 在运行期加载的实际上是DelegatingActionProxy , 而DelegatingActionProxy则实现了针对实际Action的调用代理,Struts最终调用的将是由Spring管理的Action实例。

通过这样的方式,Spring 获得了对Action 实例的管理权,它将对Action进行调度,并为Struts提供所需的Action实例。既然Action已经由Spring全权接管,那么我们就可以将此Action看作是Spring中的一个Bean,它可享受Spring提供的所有服务(依赖注入、实例管理、事务管理等)。

与之对应,Spring Context配置如下:

applicationContext.xml:

xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"    
  4.   
  5.   "http://www.springframework.org/dtd/spring-beans.dtd">  
  6.   
  7.         <!--    数据源配置    -->  
  8.   
  9. <beans>  
  10.   
  11.   <bean id="dataSource"    
  12.   
  13.       class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  14.   
  15.       <property name="driverClassName">  
  16.   
  17.           <value>com.mysql.jdbc.Driver</value>  
  18.   
  19.       </property>  
  20.   
  21.       <property name="url">  
  22.   
  23.           <value>jdbc:mysql://localhost:3306/bbs</value>  
  24.   
  25.       </property>  
  26.   
  27.       <property name="username">  
  28.   
  29.           <value>bao</value>  
  30.   
  31.       </property>  
  32.   
  33.       <property name="password">  
  34.   
  35.           <value>double</value>  
  36.   
  37.       </property>  
  38.   
  39.   </bean>  
  40.   
  41.     <!--      DAO配置     -->  
  42.   
  43.   <bean id="userDao" class="com.ctbr.springtest.dao.jdbc.UserDaoJdbc">  
  44.   
  45.       <property name="dataSource">  
  46.   
  47.           <ref bean="dataSource"/>  
  48.   
  49.       </property>  
  50.   
  51.   </bean>  
  52.   
  53.   <bean id="postDao" class="com.ctbr.springtest.dao.jdbc.PostDaoJdbc">  
  54.   
  55.       <property name="dataSource">  
  56.   
  57.           <ref bean="dataSource"/>  
  58.   
  59.       </property>  
  60.   
  61.   </bean>  
  62.   
  63.   <!--    <bean id="replyDAO" class="com.ctbr.springtest.dao.jdbc.ReplyDaoJdbc">  
  64.   
  65.       <property name="postDao">  
  66.   
  67.           <ref bean="postDAO" />  
  68.   
  69.       </property>  
  70.   
  71.   </bean>  
  72.   
  73.   -->  
  74.   
  75.   <!--        Service配置         -->  
  76.   
  77.   <bean id="userService"    
  78.   
  79.       class="com.ctbr.springtest.service.impl.UserServiceImpl"    
  80.   
  81.       autowire="byType" />  
  82.   
  83.   <bean id="postService"    
  84.   
  85.       class="com.ctbr.springtest.service.impl.PostServiceImpl">  
  86.   
  87.       <!--    <property name="replyDao">  
  88.   
  89.           <ref bean="replyDao" />  
  90.   
  91.       </property>-->  
  92.   
  93.   </bean>  
  94.   
  95. <!--      Action配置      -->  
  96.   
  97.   <bean name="/user" class="com.ctbr.springtest.web.action.UserAction"    
  98.   
  99.       singleton="false">  
  100.   
  101.       <property name="userService">  
  102.   
  103.           <ref bean="userService"/>  
  104.   
  105.       </property>  
  106.   
  107.   </bean>  
  108.   
  109. </beans>  
上面的action-mapping配置中包含了loginForm的两种配置形式,第一种是面向改造后的形式,第二种(作为注释)是与之对应的传统Struts配置方式。plug-in我们实现了Spring Context的加载,我们还需要修改配置,将Struts Action交给Spring容器进行管理:
分享到:
评论

相关推荐

    ssh整和技术struts与hibernate整合,struts与spring整合,hibernate与spring整合,struts,hibernate,sp

    Struts技术资料 hibernate技术资料 spring技术资料 ssh整合技术(struts与hibernate整合,struts与spring整合,hibernate与spring整合,struts,hibernate,spring整合)

    struts 与spring整合关键点

    以上就是Struts与Spring整合的关键点,整合这两个框架可以使应用程序更易于测试和维护,同时充分利用Spring的强大功能,如依赖注入和事务管理,提高开发效率和应用质量。在实际项目中,需要根据具体需求选择合适的...

    EJB3与Struts与Spring整合开发(SSE)

    在"EJB3与Struts与Spring整合开发(SSE)"的场景中,开发者可能将EJB3作为业务逻辑层,处理复杂的业务操作;Struts作为前端控制器,负责用户交互和请求转发;而Spring则作为整个应用的“胶水”,实现各层间的协调和...

    SSH(struts2,Hibernate,Spring)整合及测试亲测可用

    在整合过程中,开发者需要注意配置文件的正确设置,包括Struts2的struts.xml、Hibernate的hibernate.cfg.xml以及Spring的applicationContext.xml等。还需要确保各框架之间的依赖注入正确无误,例如,Spring需要知道...

    struts与spring的整合

    将Struts与Spring整合可以充分利用两者的优点,实现更高效、更灵活的开发。 **Struts框架详解** Struts是Apache软件基金会的一个开源项目,基于MVC设计模式,主要解决了JSP模型2架构中的控制器问题。它通过...

    Eclipse Struts、Spring整合

    **Eclipse Struts与Spring整合详解** 在Java Web开发领域,Struts和Spring都是非常重要的框架,它们分别在MVC模式和依赖注入方面扮演着关键角色。Struts作为一个经典的MVC框架,帮助开发者构建可维护的、结构清晰的...

    struts和spring整合(两种实现方法)

    用DelegatingRequestProcessor和DelegatingActionProxy两种方法实现struts和spring的整合,不同的地方就在struts-config.xml文件中,当前文件中DelegatingRequestProcessor是注释的。

    struts,mybatis,spring整合jar包

    4. **Struts与Spring整合**:在Struts的配置文件中,设置Action类由Spring管理,通过`&lt;interceptor-ref&gt;`引用Spring的ModelDriven拦截器,实现模型驱动。 5. **MyBatis与Spring整合**:使用Spring的...

    SSH_Struts Hibernate Spring整合

    5. **Struts与Spring整合**: 使用Spring的Struts插件,将Action实例化的工作交给Spring,通过`org.springframework.web.struts.DelegatingActionProxy`实现。 通过SSH整合,开发者可以更专注于业务逻辑的实现,而不...

    struts和spring整合的2种方式

    在实际应用中,随着Struts2的出现和Spring Boot的流行,这种Struts1与Spring的整合方式逐渐被新的框架组合取代,如Spring MVC或Spring Boot的WebFlux。然而,对于学习和理解框架整合以及依赖注入的概念,这些基础...

    struts和spring的三种整合方法

    虽然题目中没有提及,但在实际开发中,Spring MVC往往被看作是Struts与Spring整合的最佳实践。Spring MVC是Spring框架的一部分,它提供了一套完整的MVC实现,相比于Struts,Spring MVC更加轻量级,与Spring的集成...

    struts+spring+hibernate整合

    通过以上步骤,一个基本的Struts、Spring和Hibernate整合的应用就搭建完成了。这个整合的关键在于Struts处理HTTP请求,Spring管理业务对象和依赖,而Hibernate则处理数据库操作。这样的架构可以实现松耦合,便于代码...

    SSH整合 struts+hibernate+spring

    - **Struts与Spring整合的注意事项**: - 避免直接在Action类中访问Spring上下文,以免破坏Spring的封装性。 - 对Struts的定制可以通过自定义Action代理或者拦截器来实现。 通过以上几个方面的介绍,可以看出SSH...

    SSH整合源码(Struts+Spring+Hibernate整合用户注册例子)

    Struts和Spring之间通过ActionServlet和Spring的DispatcherServlet协同工作,而Spring与Hibernate之间的整合通常通过SessionFactoryBean和HibernateTemplate完成。 8. **用户注册流程**:用户提交注册信息后,...

    struts1 spring ibatis整合项目源码

    struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码struts1 spring ibatis整合项目源码

    struts+spring+hibernate 整合实例

    1. **Struts与Spring整合**:主要通过Struts2-Spring-plugin实现,配置Struts2的核心配置文件(struts.xml)以指定Spring作为Action的创建者。同时,Action类需要继承SpringActionSupport,并通过`@Component`、`@...

    Struts+Spring+Hibernate(整合)

    Struts 与Spring整合时,可以通过Spring的Action代理,实现Action的依赖注入,进一步提高代码的可测试性和解耦。 2. **Spring框架**:Spring 提供了一个容器,用于管理应用对象的生命周期和依赖关系。它允许通过XML...

    struts hibernate spring 整合 PUB

    struts struts hibernate spring 整合 PUBhibernstruts hibernate spring 整合 PUBate spring 整合 PUB

Global site tag (gtag.js) - Google Analytics