一、   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容器中获得相应的实例。

转载于:https://www.cnblogs.com/caogang/p/4380496.html

Struts2整合Spring方法及原理相关推荐

  1. struts2整合spring应用实例

    我们知道struts1与spring整合是靠org.springframework.web.struts.DelegatingActionProxy来实现的,以下通过具体一个用户登录实现来说明stru ...

  2. Spring和Struts2整合见问题之一

    最近在做一个模拟网上银行小系统时遇到了问题,自己怎么也调不出来,然后各种百度,并在多个论坛上提问,问题终于在传智论坛上被于洋老师给指出来了,真是非常感谢! 下面说一下我遇到的问题: Struts2中A ...

  3. Struts2与Spring集成中的自动装配策略

    http://www.blogjava.net/jeffma/archive/2010/11/30/339414.html 自动装配即bean之间的依赖关系无需手动配置. 1.    与自动装配有关的 ...

  4. Struts2+Hibernate+Spring 整合示例

    转自:https://blog.csdn.net/tkd03072010/article/details/7468769 Struts2+Hibernate+Spring 整合示例 Spring整合S ...

  5. Struts2学习笔记——Struts2与Spring整合

    Struts2与Spring整合后,可以使用Spring的配置文件applicationContext.xml来描述依赖关系,在Struts2的配置文件struts.xml来使用Spring创建的be ...

  6. 【struts2+hibernate+spring项目实战】Spring计时器任务 Spring整合JavaMail(邮件发送)(ssh)

    一.常用数据频度维护 对于系统使用度较高的数据,客户在查看时希望这些数据最好先出现,此时需要为其添加排序规则.在进行排序时,使用次数成为排序的依据.因此需要设置一个字段用来描述某种数据的使用次数,也就 ...

  7. Struts2与Spring整合

    Struts2与Spring整合后,可以使用Spring的配置文件applicationContext.xml来描述依赖关系,在Struts2的配置文件struts.xml来使用Spring创建的be ...

  8. Spring与Struts2整合的两种解决方案

    http://www.itzhai.com/spring-and-struts2-integration-of-the-two-solutions.html Struts2与Spring整合的方案一: ...

  9. 整合Struts2、Spring、Hibernate构建J2EE应用

    [论文摘要] J2EE即是以Java 2平台为基础的体系结构,又是一组旨在简化企业解决方案的开发.部署.运行.维护等相关复杂问题的技术规范与指南.Struts2.Spring.Hibernate是当今 ...

  10. MyBatis整合Spring原理分析

    目录 MyBatis整合Spring原理分析 MapperScan的秘密 简单总结 假如不结合Spring框架,我们使用MyBatis时的一个典型使用方式如下: public class UserDa ...

最新文章

  1. 阿里云Redis开发规范
  2. 【RedHat、CentOS Cacti安装配置】
  3. NVIDIA AGX Xavier环境配置
  4. C语言-附加-按位翻转一个unsigned int 类型的数字
  5. 零基础学python尹会生_编程零基础应当如何开始学习 Python?
  6. mysql 计划任务消耗_浅谈MySQL event 计划任务
  7. MySQL数据库(三)
  8. DataTable 排序 查询
  9. 字符串lcfirst解析
  10. UIScrollView 和 UICollectionView 分页效果
  11. 使用DataSet Datatable 更新数据库的三种方式及DataTable不同状态的取值
  12. php包含大马执行,分析一个常见的php大马并且解码过程
  13. 机械臂——六轴机械臂构型分析与MATLAB建模
  14. 把桌面路径改到D盘,忘记新建文件夹,D盘所有文件跑到桌面怎么办?
  15. java web 怎么实现直播_java web开发直播平台可以实现但有缺陷
  16. 韩版机泛泰A850framework去除漫游、本地化
  17. 计算机体系结构——1.1 计算机体系结构的概念与发展
  18. 使用JedisClusters批量高效删除redis中的key
  19. SAP MM ME56不能为审批后的PR分配货源? 2
  20. vmware注册邮箱问题

热门文章

  1. eclipse中设置JVM内存
  2. 利用Java-JACOB操作WORD文档2
  3. PHP学习之十二:自定义函数
  4. Java 堆和栈的区别,还傻傻分不清?
  5. Mybatis 有坑,千万别踩!
  6. 七年三套房,阿里程序员炫富,努力就有回报,感谢当初的选择!
  7. 工作10年才懂的道理,早知道职位比现在高两级
  8. 九大厂商联合推出「快应用」,围攻微信?
  9. python + selenium 获取标签文本的为空解决办法
  10. Linux文本编辑器-vi/vim