可以通过三种方式实现Spring管理Struts Action:
- 使用 Spring 的 ActionSupport 类整合 Structs
- 使用 Spring 的 DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor
- 将 Struts Action 管理委托给 Spring 框架
本文将讨论第三种方式:
步骤一:在Struts-config.xml中加入Spring插件ContextLoaderPlugin,为 Struts 的 ActionServlet 装载 Spring 应用程序环境。
< plug-in className =
"org.springframework.web.struts.ContextLoaderPlugIn" >
< set-property property =
"contextConfigLocation" value ="/WEB-INF/strutsbean.xml" />
</ plug-in >
其中strutsbean.xml为定义Struts Action的配置文档。
步骤二:在Struts-config.xml中将Action替换为代理类DelegatingActionProxy,负责在 Spring 环境中查找 Struts 动作。
< action path ="/searchSubmit"
type ="org.springframework.web.struts.DelegatingActionProxy"
name ="searchForm" >
< forward name ="success" path ="/WEB-INF/pages/detail.jsp" />
< forward name ="failure" path ="/WEB-INF/pages/search.jsp" />
</ action >
其中DelegatingActionProxy会根据path="/searchSubmit",到前面定义的strutsbean.xml文件中找寻相应的Action.
步骤三:定义Struts Action映射文件strutsbean.xml。
<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd" >
< beans >
< bean id ="bookService" class ="ca.nexcel.books.business.BookServiceImpl" />
< bean name ="/searchSubmit"
class ="ca.nexcel.books.actions.SearchSubmit" >
< property name ="bookService" >
< ref bean ="bookService" />
</ property >
</ bean >
</ beans >