起源
Struts最早是作為ApacheJakarta項目的組成部分,項目的創立者希望通過對該項目的研究,改進和提高JavaServerPages、Servlet、標籤庫以及面向對象的技術水準。Struts這個名字來源於在建築和舊式飛機中使用的支持金屬架。這個框架之所以叫"Struts",是為了提醒我們記住那些支撐我們房屋,建築,橋樑,甚至我們踩高蹺時候的基礎支撐。這也是一個解釋Struts在開發Web應用程式中所扮演的角色的精彩描述。當建立一個物理建築時,建築工程師使用支柱為建築的每一層提供支持。同樣,軟體工程師使用Struts為業務套用的每一層提供支持。它的目的是為了幫助我們減少在運用MVC設計模型來開發Web套用的時間。我們仍然需要學習和套用該架構,不過它將可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的優點來建立可擴展的套用,Struts是一個不錯的選擇。
早期Smalltalk程式語言便採用了MVC(Model-View-Controller)模式(Patterns)以增加程式代碼彈性,MVC模式將程式代碼整理切割為三部份,Model部分是業務與套用領域(Businessdomain)相關邏輯、管理狀態之對象,Controller部分接收來自View所輸入的資料並與Model部分互動,是業務流程控制(FlowControl)之處,View部分則負責展現資料、接收使用者輸入資料。在Java套用中,JFC/Swing、AWT、JSP皆是可用作View之技術規格,而JavaBean與EnterpriseJavaBean規格則可用於Model程式代碼,一旦應用程式以MVC模式加以適當(的)分割,Model部分程式代碼可在不同使用者接口外觀(的)應用程式中重複使用。
隨著JSP與Servlet技術大量套用於以Web為基礎(的)應用程式,Java開發人員群體認為應以較佳之模式以提升Web應用程式之可維護性與重複使用性。早期JSP規格書中曾列舉兩種可行之JSP套用架構,分別為Model1與Model2。
在Model1架構中,JSP直接處理Web瀏覽器送來之請求(Request),並輔以JavaBean處理套用相關邏輯。Model1架構單純編寫比較容易,但在Model1中JSP可能同時肩負View與Controller角色,兩類程式代碼有可能混雜而不易維護。而Model2中將Servlet納入架構中扮演前端Controller角色,將Web瀏覽器送出之請求集中送至Servlet,Servlet可集中管理使用者登入、許可權控制、多國語言轉換等前置處理,再視需求轉向給對應之JSP處理。Model2中採用了較佳之MVC模式,但增加了編寫複雜度。
Struts是Apache軟體基金下Jakarta項目的一部分。除Struts之外,還有其他成功的開源產品,包括Tomcat,Ant和Velocity。2000年CraigR.McClanahan先生貢獻了他編寫的JSPModel2架構之ApplicationFramework原始程式代碼給Apache基金會,成為ApacheJakarta計畫StrutsFramework前身。
開始的代碼基礎從2000年5月開始開發,直到2001年6月,1.0版本發布。有30多個開發者參與進來,並有數千人參與到討論組中。Struts代碼基礎由一個志願的Commnitter團隊來管理。到2002年,Struts小組共有9個志願Commnitter。
Struts框架的主要架構設計和開發者是CraigR.McClanahan。Craig也是Tomcat4的主要架構師,以及JavaWebServicesDeveloperPack的主要架構師和實現者。他現在是Sun的JavaServerFaces(JSR-127)以及J2EE平台的Web層架構的規範領導。CraigR.McClanahan先生是JCPExpertGroup成員之一,曾參與JSP規格制定與Tomcat4之編寫,因此StrutsFramework廣受Java開發人員群體所重視。Borland自2002年底開始於開發工具JBuilder中支持StrutsFramework。
Struts是Apache基金會Jakarta項目組的一個OpenSource項目,它採用MVC模式,能夠很好地幫助java開發者利用J2EE開發Web套用。和其他的java架構一樣,Struts也是面向對象設計,將MVC模式"分離顯示邏輯和業務邏輯"的能力發揮得淋漓盡致。Structs框架的核心是一個彈性的控制層,基於如JavaServlets,JavaBeans,ResourceBundles與XML等標準技術,以及JakartaCommons的一些類庫。Struts有一組相互協作的類(組件)、Servlet以及jsptaglib組成。基於struts構架的web應用程式基本上符合JSPModel2的設計標準,可以說是一個傳統MVC設計模式的一種變化類型。
Struts最早是作為ApacheJakarta項目的組成部分問世運作。項目的創立者希望通過對該項目的研究,改進和提高JavaServerPages、Servlet、標籤庫以及面向對象的技術水準。
Struts的目的是為了減少在運用MVC設計模型來開發Web套用的時間。你仍然需要學習和套用該架構,不過它將可以完成其中一些繁重的工作。
MVC即Model-View-Controller的縮寫,是一種常用的設計模式。MVC減弱了業務邏輯接口和數據接口之間的耦合,以及讓視圖層更富於變化。Struts是MVC的一種實現,它將Servlet和JSP標記(屬於J2EE規範)用作實現的一部分。Struts繼承了MVC的各項特性,並根據J2EE的特點,做了相應的變化與擴展。
概述
Struts只是一個MVC框架(Framework),用於快速開發Java Web套用。Struts實現的重點在C(Controller),包括ActionServlet/RequestProcessor和我們定製的Action,也為V(View)提供了一系列定製標籤(Custom Tag)。但Struts幾乎沒有涉及M(Model),所以Struts可以採用JAVA實現的任何形式的商業邏輯。
Spring是一個輕型容器(light-weight container),其核心是Bean工廠(Bean Factory),用以構造我們所需要的M(Model)。在此基礎之上,Spring提供了AOP(Aspect-Oriented Programming, 面向層面的編程)的實現,用它來提供非管理環境下申明方式的事務、安全等服務;對Bean工廠的擴展ApplicationContext更加方便我們實現J2EE的套用;DAO/ORM的實現方便我們進行資料庫的開發;Web MVC和Spring Web提供了Java Web套用的框架或與其他流行的Web框架進行集成。
就是說可將兩者一起使用,達到將兩者自身的特點進行互補。
優點
Struts跟Tomcat、Turbine等諸多Apache項目一樣,是開源軟體,這是它的一大優點。使開發者能更深入的了解其內部實現機制。
除此之外,Struts的優點主要集中體現在兩個方面:Taglib和頁面導航。Taglib是Struts的標記庫,靈活動用,能大大提高開發效率。另外,就目前國內的JSP開發者而言,除了使用JSP自帶的常用標記外,很少開發自己的標記,或許Struts是一個很好的起點。
關於頁面導航,我認為那將是今後的一個發展方向,事實上,這樣做,使系統的脈絡更加清晰。通過一個配置檔案,即可把握整個系統各部分之間的聯繫,這對於後期的維護有著莫大的好處。尤其是當另一批開發者接手這個項目時,這種優勢體現得更加明顯。
缺點
glib是Struts的一大優勢,但對於初學者而言,卻需要一個持續學習的過程,甚至還會打亂你網頁編寫的習慣,但是,當你習慣了它時,你會覺得它真的很棒。
Struts將MVC的Controller一分為三,在獲得結構更加清晰的同時,也增加了系統的複雜度。
Struts從產生到現在還不到半年,但已逐步越來越多運用於商業軟體。雖然它現在還有不少缺點,但它是一種非常優秀的J2EE MVC實現方式,如果你的系統準備採用J2EE MVC架構,那么,不妨考慮一下Struts。