整合Struts2與Spring的步驟

這篇文章對spring和struts的整合步驟寫的比較全,而且也對兩種整合方式的細節介紹的比較全。記下來,以後可用:

一、需要的JAR文件爲:Spring和Struts2框架本身需要的JAR文件以及他們所依賴的JAR文件,比如commons-logging.jar等等,另外還需要Struts2發佈包中的struts2-spring-plugin-x.xx.jar。
二、在web.xml中增加WebApplicationContext的相應配置,以下兩種配置方式本質是一樣的。
1.         Servlet 2.3及以上版本可以使用監聽器,相應配置如下:
<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>
如果spring配置文件被命名爲applicationContext.xml,並且放在WEB-INF目錄下,則不需要配置<context-param>,因爲ContextLoaderListener默認在WEB-INF目錄下尋找名爲applicationContext.xml的文件。若存在多個Spring配置文件,則在<param-value>中依次列出,之間以逗號隔開。
2.         Servlet 2.3以下版本由於不支持<listener>,需要配置<servlet>,格式如下:
<context-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<servlet>
              <servlet-name>contextLoaderServlet</servlet-name>
              <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
              <load-on-startup>1</load-on-startup>
</servlet>
如果spring配置文件被命名爲applicationContext.xml,並且放在WEB-INF目錄下,則不需要配置<context-param>,因爲ContextLoaderListener默認在WEB-INF目錄下尋找名爲applicationContext.xml的文件,或者是名字爲contextConfigLocation的ServletContext參數所指定的文件。由於該Servlet配置只是爲了在容器啓動時能啓動ContextLoaderServlet使其工作,而不需要引用該Servlet,所以不需要配置<servlet-mapping>。
三、在web.xml中完成加載WebApplicationContext之後,接下來就可以做到Spring和Struts2的整合了。整合有兩種方法,分別敘述如下:
1.         第一種實現方法:
1)        將Struts的業務邏輯控制器類配置在Spring的配置文件中,業務邏輯控制器中引用的業務類一併注入。注意,必須將業務邏輯控制器類配置爲scope=”prototype”!
示例如下:
<bean id=”LoginAction” class=”yaso.struts.action.LoginAction”>
                     <property name=”loginDao” ref=”LoginDao”/>
</bean>
2)        在struts.xml或者等效的Struts2配置文件中配置Action時,指定<action>的class屬性爲Spring配置文件中相應bean的id或者name值。示例如下:
<action name=”LoginAction” class=”LoginAction”>
                     <result name=”success”>/index.jsp</result>
</action>
2.         第二種實現方法:
1)        業務類在Spring配置文件中配置,業務邏輯控制器類不需要配置,Struts2的Action像沒有整合Spring之前一樣配置,<action>的class屬性指定業務邏輯控制器類的全限定名。
2)        業務邏輯控制器類中引用的業務類不需要自己去初始化,Struts2的Spring插件會使用bean的自動裝配將業務類注入進來,其實業務邏輯控制器也不是Struts2創建的,而是Struts2的Spring插件創建的。默認情況下,插件使用by name的方式裝配,可以通過增加Struts2常量來修改匹配方式:設置方式爲:struts.objectFactory.spring.autoWire = typeName,可選的裝配參數如下:
a)         name:等價於Spring配置中的autowire=”byName”,這是缺省值。
b)        type:等價於Spring配置中的autowire=”byType”。
c)         auto:等價於Spring配置中的autowire=”autodetect”。
d)        constructor:等價於Spring配置中的autowire=” constructor”。
四、如果原先在Struts2中使用了多個object factory,則需要通過Struts2常量顯式指定object factory,方式如下:struts.objectFactory = spring;如果沒有使用多個object factory,這一步可以省略。
五、可以通過設增加Struts2常量來指定是否使用Spring自身的類緩存機制。可以設定的值爲true或false,默認爲true。設置方式爲:struts.objectFactory.spring.useClassCache = false。
六、至此,完成了兩種方式的整合。比較這兩種整合方式,其本質是一樣的。不同之處在於,使用第二種自動裝配的方式時,由於沒有在Spring中配置業務邏輯控制器,所以需要對其配置一些AOP之類的內容時就很難實現了。

轉載文章地址:http://77857.blog.51cto.com/67857/159021

發佈了53 篇原創文章 · 獲贊 16 · 訪問量 75萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章