struts與Spring整合

linweihan1984發表於2007-10-15

整合 Struts 和 Spring

     與 Struts 相似,Spring 可以作為一個 MVC 實現。這兩種框架都具有自己的優點和缺點,儘管大部分人同意 Struts 在 MVC 方面仍然是最好的。很多開發團隊已經學會在時間緊迫的時候利用 Struts 作為構造高品質軟體的基礎。Struts 具有如此大的推動力,以至於開發團隊寧願整合 Spring 框架的特性,而不願意轉換成 Spring MVC。沒必要進行轉換對您來說是一個好訊息。Spring 架構允許您將 Struts 作為 Web 框架連線到基於 Spring 的業務和持久層。最後的結果就是現在一切條件都具備了。

      在接下來的小竅門中,您將會了解到三種將 Struts MVC 整合到 Spring 框架的方法。我將揭示每種方法的缺陷並且對比它們的優點。 一旦您瞭解到所有三種方法的作用,我將會向您展示一個令人興奮的應用程式,這個程式使用的是這三種方法中我最喜歡的一種。

三個小竅門

      接下來的每種整合技術(或者竅門)都有自己的優點和特點。我偏愛其中的一種,但是我知道這三種都能夠加深您對 Struts 和 Spring 的理解。在處理各種不同情況的時候,這將給您提供一個廣闊的選擇範圍。方法如下:

  • 使用 Spring 的 ActionSupport 類整合 Structs
  • 使用 Spring 的 DelegatingRequestProcessor 覆蓋 Struts 的 RequestProcessor
  • 將 Struts Action 管理委託給 Spring 框架

裝載應用程式環境

     無論您使用哪種技術,都需要使用 Spring 的 ContextLoaderPlugin 為 Struts 的 ActionServlet 裝載 Spring 應用程式環境。就像新增任何其他外掛一樣,簡單地向您的 struts-config.xml 檔案新增該外掛,如下所示:

xml 程式碼
<plug-in className=      "org.springframework.web.struts.ContextLoaderPlugIn">       <set-property property=          "contextConfigLocation" value="/WEB-INF/beans.xml"/>   </plug-in>      
<plug-in classname="  "></plug-in>      <set-property property="      " value="/WEB-INF/beans.xml"></set-property>       

      前面已經提到過,在 下載 部分,您能夠找到這三個完全可使用的例子的完整原始碼。每個例子都為一個書籍搜尋應用程式提供一種不同的 Struts 和 Spring 的整合方法。您可以在這裡看到例子的要點,但是您也可以下載應用程式以檢視所有的細節。

竅門 1. 使用 Spring 的 ActionSupport

     手動建立一個 Spring 環境是一種整合 Struts 和 Spring 的最直觀的方式。為了使它變得更簡單,Spring 提供了一些幫助。為了方便地獲得 Spring 環境,org.springframework.web.struts.ActionSupport 類提供了一個 getWebApplicationContext() 方法。您所做的只是從 Spring 的 ActionSupport 而不是 Struts Action 類擴充套件您的動作,如清單 1 所示:


清單 1. 使用 ActionSupport 整合 Struts



     讓我們快速思考一下這裡到底發生了什麼。在 (1) 處,我通過從 Spring 的 ActionSupport 類而不是 Struts 的 Action 類進行擴充套件,建立了一個新的 Action。在 (2) 處,我使用 getWebApplicationContext() 方法獲得一個 ApplicationContext。為了獲得業務服務,我使用在 (2) 處獲得的環境在 (3) 處查詢一個 Spring bean。

      這種技術很簡單並且易於理解。不幸的是,它將 Struts 動作與 Spring 框架耦合在一起。如果您想替換掉 Spring,那麼您必須重寫程式碼。並且,由於 Struts 動作不在 Spring 的控制之下,所以它不能獲得 Spring AOP 的優勢。當使用多重獨立的 Spring 環境時,這種技術可能有用,但是在大多數情況下,這種方法不如另外兩種方法合適。

你可以通過這個連結引用該篇文章:http://pearlkeeper.bokee.com/tb.b?diaryId=15898688

相關文章