Spring和struts2整合詳解
struts2 和 spring 整合,需要導入一個 struts2-spring-plugin-*.jar
這個 jar 包,在 struts2 和 spring 中都可以找到,只需要一個即可
既然使用 spring 管理 struts2 就得在 web.xml 中配置一個 spring 中的監聽器,在 spring-web.jar 下的 org.springframework.web.context 包中的 ContextLoaderListener.class 類
使用方法如下:
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
***【如果 spring 的配置文件(applicationContext.xml)不在 WebRoot/lib/ 目錄下,則,必須在 web.xml 中配置一個屬性,用來告訴編譯器,spring 的配置文件的位置
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value></context-param>
struts2 的核心攔截器也要配置在 web.xml 中 *****(一定要在<listener>標籤之後再寫)
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
【以下均為 struts2.3 之後的寫法】
applicationContext.xml 配置一:
所有 action 類的控制權都是 struts2 的;寫法和之前 struts.xml 中的配置一樣
如:
<!-- 配置 struts2 中 struts.objectFacatory 的常量值為 spring ,該屬性在 struts2 核心包中 org.apache.struts2.default.properties 文件中, 默認被注釋掉了,現在需要開啟,開啟後,默認是根據名稱自動裝配 --><constant name="struts.objectFacatory" value="spring"/> <!-- struts2 的自動裝配由誰來完成,這裡是 spring --><!-- 用這個常量去改變裝配的規則 name, type, auto, constructor 四個值--><constant name="struts.objectFactory.spring.autoWire" value="name"/><package name="default" extends="struts-default" namespace="/"> <action name="employee_*" class="action.EmployeeAction" method="{1}"> <result>index.jsp</result> <allowed-methods>login</allowed-methods> </action></package>
在 applicationContext.xml 中不需要配置 action 的類
applicationContext.xml 配置二:
所有 action 類的控制權都交給 spring ;
如:(struts.xml)
<package name="default" extends="struts-default" namespace="/"> <!-- 這裡 class 的值必須和 applicationContext.xml 中配置的 action<bean> 的 id值一樣 --> <action name="employee_*" class="employeeAction" method="{1}"> <result>index.jsp</result> <allowed-methods>login</allowed-methods> </action></package>
在 applicationContext.xml 中需要配置 action 類的信息
(applicationContext.xml)
<!-- scope="prototype" 可以創建多個實體,默認為單例 --> <bean id="employeeAction" class="action.EmployeeAction" scope="prototype" />
推薦閱讀:
※Spring Boot中使用Flyway來管理資料庫版本
※Spring boot 進階之路
※誰看過李守宏的 spring mvc教學視頻?不覺得想死嗎?
※Ribbon源碼分析系列(一)