Spring和Struts 2整合

Spring 和Struts 2都是应用非常广泛的J2EE应用程序框架,Struts 2主要注重的是将视图层和控制层分开,但是不涉及对模型层的优化设计;而Spring除了实现Struts 2的MVC功能外,还可以利用其控制反转的思想实现对模型层的优化,从更深层次去降低应用程序各个组件的耦合程度。本节将结合实例讲解如何实现 Spring框架和Struts 2框架的集成使用。

23.6.1  整合原理

Struts 2在发布的时候在其插件包struts-2.1.2/lib中有struts2-spring-plugin-2.1.2.jar,正是它实现了 Struts 2和Spring的整合。这个插件覆盖了Struts 2的ObjectFactory,所以在Struts 2创建一个对象的时候,例如Action类,它会先到Struts 2的配置文件去寻找类的名字,然后转到Spring配置文件中去查找名字找到该类。解压struts2-spring-plugin- 2.1.2.jar,可以看到有一个struts-plugin.xml文件,其内容如下:

可以看到,上面代码中用<bean>标签定义了一个name为StrutsSpringObjectFactory的bean对象,用 它去替换struts.objectFactory:<constant name="struts.objectFactory" value="spring" />。并且定义了一个spring-default包,该包有两个拦截器,如果Action类不是由ObjectFactory创建的话,则这两个 插件会自动装配Action类。

 

附加一部分:


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文件,该文件内容如下所示:查看

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

 


 

 

 

23.6.2  整合步骤

Spring和Struts 2的整合其实很简单,下面是整合步骤。

(1)复制jar文件。把struts 2-spring-plugin-2.1.2.jar和spring.jar复制到Web工程的WEB-INF/lib目录下,并且还需要复制commons-logging.jar。

(2)配置struts.objectFactory属性。在文件struts.properties中设置struts.objectFactory属性,使其使用StrutsSpringObjectFactory,代码如下:

当然也可以在struts.xml文件中配置,其中spring就是struts-plugin.xml中定义的bean:spring,代码如下所示。

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




(4)编写Spring配置文件。默认情况下Spring配置文件的名字为applicationContext.xml,该文件需要保存到Web工程的WEB-INF/目录下。内容实例如下:

在这个文件中定义要加载的类对象。

(5)编写Struts 2配置文件。将Struts 2和Spring集成,其配置文件也有变化,如下所示。




可以看出上面代码中的LoginAction其class属性并没有给出完整路径名,因而objectFactory是找不到该类的,所以就会到applicationContext.xml中去寻找bean的名字为login的类对象。

 

来源:http://book.51cto.com/art/200909/154478.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值