Struts与Spring的集成

Struts与Spring的集成主要有两种方式,即DelegatingRequestProcessor和DelegatingActionProxy方式,这两种方式应用了Spring IOC来管理Struts的Action,顾名思义,两者即是在代理某对象,熟释Struts的必然知晓RequestProcessor和Action,Spring在这两处切入到页面层的请求链中(通过扩展Struts中的RequestProcessor、Action类),以便将截获的请求传入到Spring管理的Action实例中,从而实现页面层到服务层的有效衔接。配置在Struts 1.2.9 + Spring 2.0环境下通过。
 
1          DelegatingRequestProcessor
 
1.1   配置ContextLoaderPlugin加载Spring配置
 
Spring中的ContextLoaderPlugin类实现了Struts的PlugIn接口,用于加载Spring配置。
ContextLoaderPlugin默认加载为WEB-INF\${actionServletName}-servlet.xml,如果应用部署描述文件web.xml中配置:
 
  1. <servlet>  
  2. <servlet-name>actionServlet</servlet-name>  
  3. <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>  
  4. <init-param>  
  5.         <param-name>config</param-name>  
  6.         <param-value>/WEB-INF/struts-config.xml</param-value>  
  7. </init-param>  
  8. </servlet>  
 
ContextLoaderPlugin默认加载为WEB-INF\actionServlet-servlet.xml文件。我们需要在struts-config文件中加入:
 
 
  1. <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"/>  
 
如果有多个 Spring 配置文件,则可以如下使用:
 
  1. <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">  
  2.         <set-property property="contextConfigLocation"    
  3.             value="/WEB-INF/spring/applicationContext.xml,   
  4.     /WEB-INF/spring/actionContext.xml/>  
  5. </plug-in>  
 
1.2   配置DelegatingRequestProcessor转发请求
 
Struts 中, ActionServlet 通过 RequestProcessor 完成实际的请求转发, Spring 中的DelegatingRequestProcessor扩展了 Struts 下的 RequestProcessor 类,要想DelegatingRequestProcessor完成请求转发就得在struts-config.xml文件中配置:
 
  1. <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"/>  
 
 
1.3   配置Struts中的Action
 
Struts配置文件struts-config.xml配置片段:
 
  1. <action-mappings>  
  2.          
  3.        <action path="/PreAddEditBook" name="bookForm" scope="request">  
  4.            <forward name="AddEditBookJsp" path="/AddEditBook.jsp"/>  
  5.        action>  
  6. action-mappings>  
 
Spring配置文件actionContext.xml配置片段:
  1. <bean name="/PreAddEditBook" class="com.examples.action.PreAddEditBookAction"    
  2.        scope="singleton">  
  3.         <!-- Spring服务层接口 -->  
  4.         <property name="bookManager" ref=" bookManager"/>  
  5. </bean>  
2          DelegatingActionProxy
Spring中的这个DelegatingActionProxy类扩展了Struts中的Action类。
此种方式只需要在以上方式修改两处即可:
1)  将1.2的配置注释掉;
2)  1.3中Struts配置文件struts-config.xml中的action配置里加入type=”org.springframework.web.struts.DelegatingActionProxy”属性项。
3          两种方式比较
1)  两者的目的都是将请求转发给Spring管理的Bean;
2)  在请求转发给action之前,转发给Spring的Bean;DelegatingRequestProcessor
3)  被配置为Struts的action,所有请求由ActionServlet截获再转发到action(所有action的实现类都是DelegatingActionProxy),DelegatingActionProxy再将请求转发到Spring的Bean;DelegatingActionProxy
4)  占用了一个Struts的扩展点即RequestProcessor,用户如需扩展Struts的RequestProcessor,此时只能从DelegatingRequestProcessor作为基类扩展;DelegatingRequestProcessor
5)  相对较多地侵入了Struts原有的独立的配置,所有action的实现类都是DelegatingActionProxy,页面层不方便脱离Spring。DelegatingActionProxy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值