`

Spring整合struts(二)

    博客分类:
  • java
阅读更多

转自:http://xm-king.javaeye.com/blog/519792

在Spring整合struts(一)中,我详细介绍了如何在Web应用中启动Spring,创建ApplicationContext实例,在本篇文章中,我将继续就Spring整合struts做进一步的探讨,简单的说就是Spring是如何管理Action这个bean的。

     如果系统采用了Spring,Spring负责业务逻辑组件的创建和生成,并将管理业务逻辑组件的生命周期。可以这样理解:Spring是个性能非常优秀的工厂,可以成产出所有的实例,从业务逻辑组件到持久层组件,甚至控制器。在这里,我推荐使用利用Spring的IOC特性整合struts,采用这种方式能充分利用Spring依赖注入的优势,无须显式地获取Spring的ApplicationContext实例。由SpringIOC容器管理Action也有以下两种方式:


1:使用Spring 的 DelegatingRequestProcessor 类。
2:全权委托DelegatingActionProxy。


1:使用Spring 的 DelegatingRequestProcessor 类
     查看Struts的源码,可以看到由ActionServlet调用RequestProcessor完成实际的转发,如想在ActionServlet处将请求转发给ApplicationContext的bean,可以通过扩展RequestProcessor完成,使用扩展的RequestProcessor替代struts的RequestProcessor。

       Spring能完成这种扩展,因为Spring提供的DelegatingRequestProcessor继承自 org.apache.struts.action.RequestProcessor 并覆盖了里面的方法。为了让Struts使用DelegatingRequestProcessor,通过 <controller >来替代org.apache.struts.action.RequestProcessor 的请求处理。还需要再Struts-config.xml文件中增加如下代码:


<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>

       完成这个设置后,Struts会将拦截道德用户请求转发到Spring Context下的bean,根据bean的name属性来匹配。而Struts中的action配置则无须配置type属性,即使配置了type属性也没有任何用处

2:全权委托DelegatingAcionProxy:

     DelegatingRequestProcessor替换了原来的RequestProcessor,并在请求转发给action之前,转发给Spring管理的bean;而DelegatingAcionProxy则被配置成Struts的action,即所有的请求先被ActionServlet拦截,然后将请求转发到对应的action,而action的实现类全都是DelegatingRequestProcessor;最后由DelegatingAcionProxy将请求转发给Spring容器的bean。

     DelegatingAcionProxy接受ActionServlet转发过来的请求,然后转发给ApplicationContext管理的bean,这是典型的链式处理、在Struts-config.xml文件中配置了大量的DelegatingAcionProxy实例,Spring容器中也配置了同名的Action、即Struts的业务控制器分成了两个部分:第一部分是Spring的DelegatingAcionProxy,这个部分没有实际意义,仅仅完成转发;第二部分是用户的Action实现类,负责实际的处理工作。


总结一下:
整合工作中的步骤:
1,修改struts-config.xml
2, 配置applicationContext.xml
3, 为Action添加get/set方法 来获得依赖注入的功能。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics