Apache Struts 1

StrutsApache軟體基金會(ASF)贊助的一個開源項目。它最初是Jakarta項目中的一個子項目,並在2004年3月成為ASF的頂級項目。它通過採用Java ServletJSP技術,實現了基於Java EE Web應用的Model-View-Controller(MVC設計模式應用框架,是MVC經典設計模式中的一個經典產品。

Apache Struts
原作者Craig McClanahan
開發者Apache軟體基金會
首次發布2000年5月 (2000-05)
當前版本
  • 1.4.5(2023年11月3日;穩定版本)[1]
編輯維基數據鏈接
原始碼庫 編輯維基數據鏈接
程式語言Java
作業系統跨平台
平台跨平台 (JVM)
許可協議Apache License 2.0
網站struts.apache.org

MVC結構

在Struts中,已經由一個名為ActionServlet的Servlet充當 控制器Controller)的角色,根據描述模型、視圖、控制器對應關係的struts-config.xml的配置文件,轉發視圖(View)的請求,組裝響應數據模型(Model)。在MVC模型Model)部分,經常劃分為兩個主要子系統(系統的內部數據狀態改變數據狀態的邏輯動作),這兩個概念子系統分別具體對應Struts 1裡的ActionActionForm兩個需要繼承實現超類,Struts 2移除ActionForm[2]。在這裡,Struts可以與各種標準的數據訪問技術結合在一起,包括Enterprise Java Beans(EJB), JDBCJNDI。在Struts的視圖View)端,除了使用標準的JavaServer Pages(JSP)以外,還提供了大量的標籤庫使用,同時也可以與其他表現層組件技術(產品)進行整合,比如Velocity Templates,XSLT等。通過應用Struts的框架,最終用戶可以把大部分的關注點放在自己的業務邏輯(Action)與 映射關係的配置文件(struts-config.xml)中。

發展歷程

 
Struts 2的合併示意圖

Java EEWeb應用發展的初期,除了使用Servlet技術以外,普遍是在JavaServer Pages(JSP)的原始碼中,採用HTMLJava代碼混合的方式進行開發。因為這兩種方式不可避免的要把表現與業務邏輯代碼混合在一起,都給前期開發與後期維護帶來巨大的複雜度。為了擺脫上述的約束與局限,把業務邏輯代碼從表現層中清晰的分離出來,2000年,Craig McClanahan採用了MVC的設計模式開發Struts。後來該框架產品一度被認為是最廣泛、最流行JAVA的WEB應用框架。

2006年,WebWork與Struts的Java EE Web框架的團體,決定合作共同開發一個新的,整合了WebWork與Struts優點,並且更加優雅、擴展性更強的框架,命名為「Struts 2」,原Struts的1.x版本產品稱為「Struts 1」。Struts項目並行提供與維護兩個主要版本的框架產品——Struts 1與Struts 2

在2008年12月,Struts1發布了最後一個正式版(1.3.10),而2013年4月5日,Struts開發組宣布終止了Struts 1的軟體開發周期[3]

優缺點

Struts的優點主要集中體現在兩個方面,Taglib和頁面導航。Taglib是Struts的標記庫,靈活動用,能大大提高開發效率。

Struts這個名字來源於在建築和舊式飛機中使用的支持金屬架。它的目的是為了減少在運用MVC設計模型來開發Web應用的時間。你仍然需要學習和應用該架構,不過它將可以完成其中一些繁重的工作。Struts跟Tomcat、Turbine等諸多Apache項目一樣,是開源軟體,這是它的一大優點,使開發者能更深入的了解其內部實現機制。

Struts2的漏洞處理機制常被詬病,一來OGNL的功能強大和請求處理機制極易產生遠程執行問題,二來開發組對漏洞處理能力不足,要麼修復後仍可以繞過,要麼無法修復而長期閒置處理。[4]

參考文獻

  1. ^ Release 1.4.5. 2023年11月3日 [2024年7月18日]. 
  2. ^ Can anyone explain the concept of Action and ActionForm. [2012-03-21]. (原始內容存檔於2023-11-04). 
  3. ^ Apache Struts 1 EOL Press Release. [2014-08-19]. (原始內容存檔於2014-08-17). 
  4. ^ Struts2漏洞频出 祸根是Apache底层代码不严谨_中小企业_比特网. [2014-08-19]. (原始內容存檔於2014-08-19). 

外部連結

參見