spring 与struts的集成

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中配置:

<servlet>
<servlet-name>actionServlet</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>

则ContextLoaderPlugin默认加载为WEB-INF\actionServlet-servlet.xml文件。我们需要在struts-config文件中加入:


<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"/>

如果有多个Spring配置文件,则可以如下使用:

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/spring/applicationContext.xml,
/WEB-INF/spring/actionContext.xml/>
</plug-in>

1.2 配置DelegatingRequestProcessor转发请求

在Struts中,ActionServlet通过RequestProcessor完成实际的请求转发,Spring中的DelegatingRequestProcessor扩展了Struts下的RequestProcessor类,要想DelegatingRequestProcessor完成请求转发就得在struts-config.xml文件中配置:

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


1.3 配置Struts中的Action

Struts配置文件struts-config.xml配置片段:

<action-mappings>
<!-- 此处可以省略type属性 -->
<action path="/PreAddEditBook" name="bookForm" scope="request">
<forward name="AddEditBookJsp" path="/AddEditBook.jsp"/>
action>
action-mappings>

Spring配置文件actionContext.xml配置片段:
<bean name="/PreAddEditBook" class="com.examples.action.PreAddEditBookAction"
scope="singleton">
<!-- Spring服务层接口 -->
<property name="bookManager" ref=" bookManager"/>
</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、付费专栏及课程。

余额充值