這篇博客摘自[http://blog.csdn.net/chendc201/article/details/8464008], web
其中也有一些是本身增長的部分 . spring
第一步, 須要爲 Struts 裝載 Spring 應用上下文環境。有如下三種方式:數據庫
1) 在 struts-config.xml 中使用 Struts Pluginapp
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml,/WEB-INF/action-servlet.xml"/> </plug-in>
2) 在 web.xml 中使用 ContextLoaderListenerjsp
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
3) 在 web.xml 中使用 ContextLoaderServletspa
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationContext.xml</param-value> </context-param> <servlet> <servlet-name>SpringContextServlet</servlet-name> <servlet-class> org.springframework.web.context.ContextLoaderServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet>
須要注意的是:.net
使用 Struts PlugIn 的方式加載 Spring 配置文件有可能致使 DWR 沒法取得 Spring 中定義的 bean,由於 DWR 有可能先於 Struts 被訪問使用,而此時 Struts 配置文件還未加載!所以,在 Spring、Struts 和 DWR 集成時,應該在 web.xml 中經過 ContextLoaderLisenter 或 ContextLoaderServlet 加載 Spring 配置文件。 code
最佳實踐是使用 Struts PlugIn 的方式加載 Struts Action 配置文件 /WEB-INF/action-servlet.xml,而使用 ContextLoaderLisenter 或 ContextLoaderServlet 方式加載 Spring 配置文件 applicationContext.xml,經過兩次加載完成 Spring全部配置文件的加載。 orm
第二步, 整合Struts1 和 Spring, 也就是管理 action 的 methodxml
使用 DelegatingActionProxy 將 Struts Action 管理權委託給 Spring
<form-beans> <form-bean name="loginForm" type="com.xxx.yyy.struts.LoginForm" /> <!-- 省略不少--> </form-beans> <action-mappings> <action attribute="loginForm" name="loginForm" parameter="method" path="/login" scope="request" type="org.springframework.web.struts.DelegatingActionProxy"> <forward name="login" path="/login.jsp"/> <forward name="main" path="/main.jsp"/> <!-- 省略不少--></action> </action-mappings>
上面的 loginForm 我理解爲一個 POJO , 和數據庫中映射出來的實體類有必定的區別, formbean具備的屬性會比較少, 用於封裝表單數據, 便於傳遞 .
對應的在 Spring 配置文件中應該就有 action 的實現類, 注意 name 屬性, 是帶有斜槓的, 對應 action 配置的 path 屬性.
<bean name="/login" class="com.xxx.yyy.struts.LoginAction"> <property name="xxxService"> <ref bean="xxxService"/> </property> <property name="yyyService"> <ref bean="yyyService"/> </property> <property name="zzzService"> <ref bean="zzzService"/> </property> </bean>
action 中 method 的編寫和 Struts2 差很少, 只不過不是返回一個邏輯視圖的 String , 而是一個包含了 String 的 ActionForward對象, 道理仍是同樣的 , 也就是邏輯視圖 , 而後再去對應的 action 配置中尋找物理視圖.
public class LoginAction extends BaseAction { public ActionForward login(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){ //處理邏輯 return mapping.findForward("main"); }
}
上面的 BaseAction繼承自 Struts 核心控制器 DispatchAction, 而且注入必須的業務層的 bean.