`

spring struts 整合

阅读更多

Spring Struts1.x 整合

使用Spring的ActionSupport 类整合Structs1.X,使用 Spring 的 DelegatingRequestProcessor覆盖Struts的RequestProcessor,将StrutsAction管理委托给Spring框架
--
装载应用环境:
无论您使用哪种技术,都需要使用 Spring 的 ContextLoaderPlugin 为 Struts 的 ActionServlet 装载 Spring 应用程序环境
在struts-config.xml 文件尾处添加该插件:
<plug-in className=  "org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property= "contextConfigLocation" value="/WEB-INF/class/applicationContext.xml"/>
</plug-in>
--
第一种:使用Spring的ActionSupport
该方法: 简单快捷,但会导致struts和spring耦合在一起,如果要移值struts应用程序要重写代码.
例如:
  public class ActionName extends ActionSupport {
    public ActionForward execute(    ){
    ------------------------------------------------------------------------------
    ApplicationContext ctx= getWebApplicationContext();    
    BookService bookService = (BookService) ctx.getBean("bookService");     
    -------------------------------------------------------------------------------------------------------------  
   }
}

--

 

第二种:覆盖 RequestProcessor
该方法使 用 org.springframework.web.struts.DelegatingRequestProcessor 类来覆 盖 Struts 的 RequestProcessor 处理程序,通 过 Spring 的 DelegatingRequestProcessor 进行整合,看下面的struts-config.xml文件的主要配置部 分:
<form-beans>
 <controller processorClass="org.springframework.web.struts.
       DelegatingRequestProcessor"/>
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" 
      value="/WEB-INF/applicationContext.xml"/>
 </plug-in>
<form-beans/>

然后定义的action的path属性要和spring配置文件里面的bean的name属性名字一样。
此方法比第一种要好,但如果您使用一个不同的 RequestProcessor,则需要手动整合 Spring 的 DelegatingRequestProcessor,添加的代码会造成维护的麻烦并且将来会降低您的应用程序的灵活性。
--

第三种:将动作管理委托给 Spring
这里列出struts-config.xml中的主要部分:
<action  path="/searchSubmit" 
      type="org.springframework.web.struts.DelegatingActionProxy" 
      ...............
      </action>  
<plug-in 
    className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation" 
       value="/WEB-INF/application.xml"/>
 </plug-in>

然后定义的action的path属性要和spring配置文件里面的bean的name属性名字一样。
此方法是三种方法中最好的

 

Spring Struts2 整合

Struts 2框架整合Spring很简单,下面是整合的步骤。

1.复制文件 。复制struts2-spring-plugin-x-x-x.jar和spring.jar到WEB-INF/lib目录下。其中的x对应了Spring的版本号。还需要复制commons-logging.jar文件到WEB-INF/lib目录下。

2.配置struts.objectFactory属性值 。在struts.properties中设置struts.objectFactory属性值:

struts.objectFactory = spring

或者在XML文件中进行常量配置:

<struts>

       <constant name="struts.objectFactory" value="spring" />

       ...

</struts>

3.配置Spring监听器 。在web.xml文件中增加如下内容:

<listener>

       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

4.Spring配置文件 。默认情况下,Spring配置文件为applicationContext.xml,该文件需要保存在Web应用的WEB-INF目录下。内容示例如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC

       "-//SPRING//DTD BEAN//EN"

       "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="byName">

       <bean id="personManager" class="com.acme.PersonManager"/>

</beans>

开发者实际上可以使用多个Spring配置文件,在web.xml中进行下列设置,从而使Spring的ApplicationContext通过匹配所给定模式的文件来初始化对象:

<!-- 用来定位Spring XML文件的上下文配置 -->

<context-param>

       <param-name>contextConfigLocation</param-name>

       <param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml </param-value>

</context-param>

5.修改Struts配置文件 。Struts 2框架整合Spring框架,需要在Struts配置文件中有所改变,下面是一个示例:

<!DOCTYPE struts PUBLIC

       "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

       "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

       <include file="struts-default.xml"/>

       <package name="default" extends="struts-default">

           <action name="foo" class="com.acme.Foo">

               <result>foo.ftl</result>

           </action>

       </package>

       <package name="secure" namespace="/secure" extends="default">

           <action name="bar" class="bar">

               <result>bar.ftl</result>

           </action>

       </package>

</struts>

该配置文件中定义了两个Action配置:foo是一个标准的Struts 2框架Action配置,指定了Action实现类为com.acme.Foo;bar对应的class并不存在,那么框架将在Spring配置文件中查找id属性为“bar”的定义 ,该配置文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC

       "-//SPRING//DTD BEAN//EN"

       "http://www.springframework.org/dtd/spring-beans.dtd">

<beans default-autowire="byName">

       <bean id="bar" class="com.my.BarClass" singleton="false"/>

       ...

</beans>
 
整合原理

Struts2与Spring的集成要用到Spring插件包struts2-spring-plugin-x-x-x.jar,这个包是同Struts2一起发布的。Spring 插件是通过覆盖(override)Struts2的ObjectFactory来增强核心框架对象的创建。当创建一个对象的时候,它会用Struts2 配置文件中的class属性去和Spring配置文件中的id属性进行关联,如果能找到,则由Spring创建,否则由Struts 2框架自身创建然后由Spring来装配 。Spring插件具体有如下几个作用:

— 允许Spring创建Action、Interceptror和Result。

— 由Struts创建的对象能够被Spring装配。

— 如果没有使用Spring ObjectFactory,提供了2个拦截器来自动装配action

 

开发者不必在Spring中去注册action,尽管可以这么去做,通常Struts框架会自动地从action mapping中创建action对象

 

struts2-spring-plugin-x-x-x.jar插件中有一个struts-plugin.xml文件,该文件内容如下所示:

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />

 

    <!--  设置Spring对象工厂为自动 -->

    <constant name="struts.objectFactory" value="spring" />

    <package name="spring-default">

        <interceptors>

            <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>

            <interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>

        </interceptors>

    </package>   

</struts>

其中设置了Struts 2框架常量struts.objectFactory的值为spring,实际上,spring是org.apache.struts2.spring.StrutsSpringObjectFactory类的缩写,默认情况下所有由Struts 2框架创建的对象都是由ObjectFactory实例化的 ,ObjectFactory 提供了与其他IoC容器如Spring、Pico等集成的方法。覆盖这个ObjectFactory的类必须继承ObjectFactory类或者它的任 何子类,并且要带有一个不带参数的构造方法。在这里用org.apache.struts2.spring.StrutsSpring ObjectFactory代替了默认的ObjectFactory。

如果Action不是使用Spring ObjectFactory创建的话,插件提供了两个拦截器来自动装配Action,默认情况下框架使用的自动装配策略是name ,也就是说框架会去Spring中寻找与Action属性名字相同的bean,可选的装配策略还有:type、auto、constructor,开发者可以通过常量struts.objectFactory.spring.autoWire来进行设置。 

Struts 2框架整合Spring后,处理用户请求的Action并不是Struts框架创建的,而是由Spring插件创建的。创建实例时,不是利用配置Action时指定的class属性值,根据bean的配置id属性,从Spring容器中获得相应的实例。

 

 

分享到:
评论

相关推荐

    ibatis spring struts 整合案例

    在Ibatis Spring Struts整合中,Spring通常作为核心框架,管理其他组件的生命周期,包括Struts的Action和Ibatis的SqlSession。开发者可以利用Spring的AOP功能来管理事务,确保在多条数据库操作之间保持一致性。...

    Struts2整合Spring、JPA

    Struts2整合Spring和JPA是企业级Java应用开发中常见的技术组合,它们分别负责不同的职责:Struts2作为一款成熟的MVC框架,主要用于处理Web层的请求与响应;Spring作为一个全面的轻量级框架,提供了依赖注入(DI)和...

    spring与struts2整合

    Spring 和 Struts2 是两个...总之,Spring 和 Struts2 的整合利用了两者的优势,提供了一种强大的方式来构建可扩展、易于维护的 Java Web 应用。通过深入学习和实践,开发者可以掌握这种整合技巧,并在实际项目中应用。

    Spring + struts 整合的三种主要方式

    ### Spring与Struts整合的三种主要方式 在Java Web开发领域,Spring框架和Struts框架都是非常重要的技术。Spring框架以其强大的依赖注入(DI)和面向切面编程(AOP)功能,为Java应用提供了轻量级的解决方案。而...

    Spring与Struts2整合

    Spring以其强大的依赖注入(DI)和面向切面编程(AOP)能力,而Struts2则以其优秀的MVC设计模式著称,两者整合可以构建出高效、可维护的Web应用。下面将详细介绍Spring与Struts2整合的相关知识点。 **一、整合背景*...

    spring_struts整合jar包

    2. **Spring MVC与Struts2的集成**:虽然两者都有MVC模式,但在整合时,通常会使用Struts2来处理请求的路由和响应,而Spring MVC则处理更复杂的视图解析和数据绑定。 3. **Spring事务管理**:Spring提供了强大的...

    Spring与struts整合开发实例

    Spring与struts整合主要有三种方式,通过Spring的ActionSupport类,通过Spring的DelegatingRequestProcessor类、通过Spring的DelegatingActionProxy类。

    spring_struts_hibernate整合开发书籍

    《Spring+Struts+Hibernate整合开发》是一本深入讲解企业级Java应用开发的书籍,它主要聚焦于三大著名开源框架——Spring、Struts和Hibernate的集成与应用。这些框架是Java Web开发中的基石,广泛应用于各种复杂的...

    JPA+Spring+Struts整合实例,JPA+Spring+Struts整合实例

    通过以上步骤,你就能完成一个基本的JPA+Spring+Struts整合应用。这种整合方式能充分利用每个框架的优点,提高代码的可维护性和可扩展性,降低开发复杂度。在实际项目中,你可能还需要考虑异常处理、安全控制、性能...

    spring和struts整合的三种方案

    Spring 和 Struts 整合是企业级 Java 应用开发中常见的技术组合,它们各自在应用程序架构中扮演着重要的角色。Spring 提供了依赖注入(DI)和面向切面编程(AOP),而 Struts 则是一个经典的MVC框架,用于处理用户...

    Spring和Struts整合例子

    将Spring与Struts整合可以充分利用两者的优点,提高开发效率和应用的可维护性。 整合Spring和Struts的过程主要包括以下几个关键步骤: 1. **环境准备**:首先,确保你的开发环境中已经安装了Java、Eclipse或...

    spring与struts整合开发包

    接下来,我们将详细探讨Spring和Struts整合开发中的关键知识点。 1. **Spring框架**:Spring的核心特性包括DI(依赖注入)和AOP(面向切面编程)。DI使得对象之间的关系在配置文件中定义,而不是硬编码在代码里,这...

    spring3.2.6struts2.3.15MyBatis3整合DEMO

    《Spring 3.2.6、Struts 2.3.15与MyBatis 3整合实战详解》 在Java Web开发领域,Spring、Struts和MyBatis是三大主流框架,它们各自承担着不同的职责,共同构建了一个强大的企业级应用开发环境。本DEMO以Spring ...

    Spring整合Struts

    ### Spring与Struts的整合:实现灵活的企业级应用开发 在企业级应用开发领域,Spring框架和Struts框架都是极具影响力的技术。Spring以其强大的依赖注入(DI)和面向切面编程(AOP)能力,提供了良好的环境管理和...

    Myeclipse下整合springstruts2

    在本文中,我们将探讨如何在MyEclipse环境中整合Spring和Struts2框架,这对于初学者来说是一个重要的学习步骤。整合这两个框架可以创建一个强大的MVC架构,方便地管理业务逻辑和服务层。以下是如何进行环境搭建和...

    spring+struts2整合源码

    本文将基于"spring+struts2整合源码"的标题和描述,详细讲解Spring和Struts2的整合过程,以及整合过程中涉及的关键知识点。 首先,Spring和Struts2整合的主要目的是实现业务逻辑层和表现层的解耦,提高代码的可测试...

    Struts+Spring+Hibernet整合例子

    Struts+Spring+Hibernet整合例子 Struts+Spring+Hibernet整合例子 Struts+Spring+Hibernet整合例子 Struts+Spring+Hibernet整合例子 Struts+Spring+Hibernet整合例子

    struts 整合spring 例子,测试通过

    Struts2 和 Spring 整合是Java开发中常见的实践,主要目的是为了利用Spring的强大功能,如依赖注入(DI)和面向切面编程(AOP),同时保持Struts2的MVC架构的优势。以下是对整合过程的详细说明: 首先,Spring框架...

    使用Spring整合Struts编写多页面用户注册模块

    总的来说,整合Spring和Struts编写多页面用户注册模块涉及到的主要知识点有:Spring的DI和AOP,Struts的MVC架构,Action和Result的配置,以及JSP或模板引擎的使用。通过这样的整合,我们可以构建出一个灵活、可扩展...

    Spring与Struts 2整合.zip

    整合Spring和Struts 2的主要目的是将Spring的依赖注入和管理能力引入到Struts 2的Action中,以及利用Spring的AOP进行事务管理。整合步骤通常包括以下几个部分: 1. **添加依赖**:在项目中引入Spring和Struts 2的库...

Global site tag (gtag.js) - Google Analytics