[標題]
Struts原理簡介
內容提要:
Struts原理簡介
本文:
Struts是作為Apache Jakarta項目的組成部分。該項目的目標是為建立Java web 應用程式而提供的一個開源架構,目前大家一般使用的版本為1.1,但也出現了1.2。通過使用struts 架構可以改進和提高Java Server Pages (JSPs)、Servlet、標籤庫以及物件導向的技術在web應用程式中的應用。應用Struts架構可以減少應用MVC(Model- View -Controller)設計模式的開發時間,從而提高開發效率。
項目的創立者希望通過對該項目的研究,改進和提高Java Server Pages (JSPs)、Servlet、標籤庫以及物件導向的技術水準(可以到http://jakata.apache.org/Struts下載)。
Struts這個名字來源於在建築和舊式飛機中使用的支援金屬架。它的目的是為了協助你減少在運用MVC設計模型來開發Web應用的時間。你仍然需要學習和應用該架構,不過它將可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的優點來建立可擴充的應用,將Struts應用於J2EE用戶端,應該是一個不錯的選擇。
J2EE體系包括JSP、Servlet、EJB、WEB SERVICE等多項技術。這些技術的出現給電子商務時代的WEB應用開發提供了一個非常有競爭力的選擇。怎樣把這些技術組合起來,形成一個適應項目需要的穩定架構是項目開發過程中一個非常重要的步驟。此步驟一般主要由架構設計師完成,設計師將根據項目需求,對J2EE體系中的各種技術進行篩選取捨,並考慮到開發過程中的角色分工、後期的運行維護,以及系統擴充性等諸多因素,建立系統的架構。一個成功的軟體需要有一個成功的架構,但軟體架構的建立是一個複雜而又持續改進的過程,軟體開發人員們不可能對每個不同的項目做不同的架構,而總是盡量重用以前的架構,或開發出盡量通用的架構方案,Struts就是其中之一,Struts是流行的基於J2EE的架構方案,其他常用的基於J2EE的架構方案還有Turbine、RealMothods等。
談到Struts,就不得不提到MVC設計模式。MVC即Model-View-Controller的縮寫,它是web應用當中的常用的設計模式。MVC減弱了商務邏輯介面和資料介面之間的耦合,同時讓視圖層更富於變化。Struts是MVC的一種實現,它很好的結合了Jsp,Java Servlet,Java Bean,Taglib等技術。
1.控制:在Struts中,承擔MVC中Controller角色的是一個Servlet,叫ActionServlet。ActionServlet是一個通用的控制組件。這個控制組件提供了處理所有發送到Struts的HTTP請求的進入點。它截取和分發這些請求到相應的動作類(這些動作類都是Action類的子類)。另外控制組件也負責用相應的請求參數填充 Action Form(通常稱之為FromBean),並傳給動作類(通常稱之為ActionBean)。動作類訪問核心商業邏輯,即訪問Java Bean或調用EJB。最後動作類把控制權傳給後續的JSP檔案,由JSP檔案產生視圖。所有這些控制邏輯利用Struts-config.xml檔案來配置。
2.視圖:主要由JSP產生頁面完成視圖,Struts提供豐富的JSP標籤庫: Html,Bean,Logic,Template等,這有利於分開表現邏輯和程式邏輯。
3.模型:模型以一個或多個Java Bean的形式存在;在Struts中,主要存在三種Bean,分別是:Action,ActionForm,EJB或者Java Bean。Action Form通常稱之為FormBean,封裝了來自於Client的使用者請求資訊,如表單資訊。Action通常稱之為ActionBean,擷取從ActionSevlet傳來的FormBean,取出FormBean中的相關資訊,並做出相關的處理,一般是調用Java Bean或EJB等。
瞭解了Struts的各個部分的職責,其工作流程就清晰可見了。在Struts中,使用者的請求一般以*.do(這個尾碼是可以自由配置的)作為請求服務名,所有的*.do請求均被指向ActionSevlet,ActionSevlet根據Struts-config.xml中的配置資訊,將使用者請求封裝成一個指定名稱的FormBean,並將此FormBean傳至指定名稱的ActionBean,由ActionBean完成相應的業務操作,如檔案操作,資料庫操作等。每一個*.do均有對應的FormBean名稱和ActionBean名稱,這些在Struts-config.xml中配置。
因此Struts可以為Web應用的開發和維護帶來諸多的好處,其優點表現在以下幾個方面:
- 利用Struts提供的taglib可以大大節約開發時間;
- 表現與邏輯分離;
- 維護擴充比較方便;
- 便於團隊開發;
- 通過使用Struts架構,可以提高系統的可維護性和可重用性。
其缺點是大量的使用標籤,對於初學者難度較大。
參考資料:
1、 《Struts-documentation》
2、 《當前流行的J2EE WEB應用架構分析》 龔永生 IBM開發人員網站
3、 《Struts,MVC 的一種開放源碼實現用這種Servlet和JSP架構管理複雜的大型網站》Malcolm G. Davis IBM開發人員網站
4、 《Jakarta Struts Book Review Project》 Chuck Cavaness Theserverside連載