`
blues1021
  • 浏览: 134206 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

《转改》Struts2和Spring的集成原理

    博客分类:
  • SSH
 
阅读更多

2009年09月02日 星期三 下午 01:18

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"/>

<!--1.关联到struts中,若没有可以用struts-plugin.xml( truts2-spring-plugin-x-x-x.jar中定义) 来给struts处理-->

       ...

</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" />

  <!--定义的name=“spring"( struts-plugin.xml中) 是对象生成工厂,可装载Action类(装载的也可为struts创建)-->

 

    <!--  设置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容器中获得相应的实例。

分享到:
评论

相关推荐

    struts spring集成原理

    struts spring集成原理 struts spring集成原理 struts spring集成原理

    struts2和spring结合插件原理

    struts2-spring-plugin.jar :struts,spring插件。...在我们集成struts2+spring+hibernate,也就是所谓的S2SH,不可避免的要引入struts2-spring-plugin.jar插件。 本文介绍了该插件的使用方式,工作原理,和常见问题

    整合struts2和spring源代码(可以直接在tomcat中运行)

    1.将struts2和spring中的库文件复制到项目下(可以查看WEB-INF\lib目录下的文件) 注意:struts2-spring-plugin-2.3.8.jar和commons-logging.jar文件可以在 struts框架中的找到而spring.jar 在spring框架中 2. ...

    SSH(Struts1.0+Spring+Hibernate)框架集成笔记

    SSH框架集成是较复杂和难理解的,只有在不断的练习和使用中才能慢慢的理解其中的原理,仅凭看视频是远远不够的,因为这些涉及了尤其是spring底层的好多类以及控制翻转(IOC)和面向切面(AOP)编程的思想,不过在讲述...

    DWR,Struts,Hibernate和Spring的J2EE架构开发大全

    Spring_IoC集成原理的应用设计.pdf Sturts2与以其它Web应用框架整合的研究.pdf 图书缺藏网站解决方案.pdf 基于Ajax技术即时通讯系统的设计与实现.pdf 基于Ajax技术的实时数据监测系统的研究与应用.pdf 基于DWR与JST...

    struts2.3.7+spring3.0.0简单示例

    示例在Struts2.3.7环境中集成Spring3.0框架。 没有过多的代码,主要想描述Spring如何与Struts整合,以及他们的工作原理。 如果需要ssh整合框架,请转到:http://blog.csdn.net/xz2001

    spring2.5学习PPT 传智博客

    28.Struts与Spring集成方案2(Spring集成Struts) 29.为Spring集成的Hibernate配置二级缓存 30.Spring提供的CharacterEncoding和OpenSessionInView功能 31.使用Spring集成JPA 32.Struts+Spring+JPA集成 33.使用...

    Struts2 in action中文版

    第9章 集成Spring和Hibernate/JPA 196 9.1 为什么在Struts 2中使用Spring 196 9.1.1 依赖注入能做些什么 197 9.1.2 Spring如何管理对象和注入依赖 199 9.1.3 使用接口隐藏实现 200 9.2 将Spring添加到Struts 2 202 ...

    Spring_Struts集成

    原理:在Action中取得BeanFactory对象,然后通过BeanFactory获取业务逻辑对象

    传智播客黎活明struts2.5视频教学源代码1-18集

    那还等什么,本套视频教程从底层原理代码入手,循序渐进,透彻地向你展示了Spring 2.5的基本应用和各项新功能,清晰地讲解了如何使用Spring的最新和最优雅的方式来集成Struts,Struts2,Hibernate,JPA等流行的框架和...

    Spring攻略(第二版 中文高清版).part2

    6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4 将Spring与JSF集成 226 6.4.1 问题 226 6.4.2 解决方案 226 6.4.3 工作原理 227 6.5 将Spring与DWR...

    Spring攻略(第二版 中文高清版).part1

    6.3 将Spring与Struts 1.x集成 220 6.3.1 问题 220 6.3.2 解决方案 220 6.3.3 工作原理 220 6.4 将Spring与JSF集成 226 6.4.1 问题 226 6.4.2 解决方案 226 6.4.3 工作原理 227 6.5 将Spring与DWR...

    传智播客黎活明struts源码

    那还等什么,本套视频教程从底层原理代码入手,循序渐进,透彻地向你展示了Spring 2.5的基本应用和各项新功能,清晰地讲解了如何使用Spring的最新和最优雅的方式来集成Struts,Struts2,Hibernate,JPA等流行的框架和...

    Struts2 入门培训

    4 1.3.2. 受控目录 5 2. 入门例子 5 2.1. 项目 5 2.2. 在WEB.XML中,配置FILTERDISPATCHER过滤器 6 2.3. 配置STRUTS.PROPERTIES 6 2.4. 编写一个简单的ACTION类 7 2.5. STRUTS.XML配置文件 8...

    Spring in Action中文版 清晰pdf part2

    第一部分展示了Spring框架的两个核心概念:反向控制(Inverstion of Control,IoC)和面向切面编程(Aspect-Oriented Programming,AOP),以便读者理解Spring的基础原理,这些基础原理在本书各个章节都会用到。...

    spring+hibernate学习笔记和项目源代码

    struts与hibernate集成原理,基础知识补充AOP,编程式事务,声明式事务,spring注入学习笔记

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

    3.2. 容器和bean的基本原理 3.2.1. 容器 3.2.1.1. 配置元数据 3.2.2. 实例化容器 3.2.2.1. 组成基于XML配置元数据 3.2.3. 多种bean 3.2.3.1. 命名bean 3.2.3.2. 实例化bean 3.2.4. 使用容器 3.3. 依赖 3.3.1. 注入...

    Spring 2.0 开发参考手册

    3.2. 容器和bean的基本原理 3.2.1. 容器 3.2.2. 实例化容器 3.2.3. 多种bean 3.2.4. 使用容器 3.3. 依赖 3.3.1. 注入依赖 3.3.2. 构造器参数的解析 3.3.3. bean属性及构造器参数详解 3.3.4. 使用depends-on...

    Spring中文帮助文档

    3.2. 基本原理 - 容器和bean 3.2.1. 容器 3.2.2. 实例化容器 3.2.3. 多种bean 3.2.4. 使用容器 3.3. 依赖 3.3.1. 注入依赖 3.3.2. 依赖配置详解 3.3.3. 使用depends-on 3.3.4. 延迟初始化bean 3.3.5. 自动...

Global site tag (gtag.js) - Google Analytics