Struts1、WebWork、Struts2介紹

來源:互聯網
上載者:User

標籤:常用   map   安全   images   方便   servlet   control   advice   nmap   

一、Struts1    1、Struts1原理簡介   

        Struts1架構以ActionServlet作為控制器核心,整個應用由用戶端請求驅動。當用戶端向Web應用發送請求時,請求被Struts1的核心控制器ActionServlet攔截,ActionServlet根據請求決定是否需要調用商務邏輯控制器處理使用者請求(實際上,商務邏輯控制器還是控制器,它只是負責調用模型來處理使用者請求),當使用者請求處理完成後,其處理結果會通過jsp呈現給使用者。

        Struts1,控制器就是它的核心,Struts1的控制器分為核心控制器和商務邏輯控制器。核心控制器就是ActionServlet,由Sturts1架構提供;商務邏輯控制就是使用者自訂的Action,由應用開發人員提供。

        Struts1的運行流程:

       

 

 

2、MVC分析(1)、Model

        Struts1的Model部分由底層的商務邏輯組件充當,這些商務邏輯組件封裝了底層資料庫訪問、商務邏輯方法實現。

(2)、View

        Struts1的View部分採用Jsp實現。不支援FreeMarker、Velocity等模板技術,支援的表現層技術單一。

(3)、Controller

        由兩個部分組成。

                系統核心控制器:由Struts1架構提供,就是系統的ActionServlet。

                商務邏輯控制器:由Struts1架構提供,就是使用者自己實現的Action執行個體。

3、優缺點

        對於Struts1架構而言,因為它與JSP/Servlet耦合非常緊密,因為導致了很多缺陷--------這也就是Struts2出現的原因。

(1)、支援的表現層技術單一

        不支援FreeMarker、Velocity等模板技術。控制器並沒有直接執行轉寄請求,而僅僅返回一個邏輯視圖名(ActionForward對象)----實際的轉寄放在設定檔中。

(2)、與Servlet嚴重耦合,難於測試

        對於處理請求的execute方法,它有四個參數,ActionMapping、ActionForm、HttpServletRequest和HttpServletResponse。

(3)、代碼嚴重依賴於Struts1 API,屬於侵入式設計

        Action類的設計,導致了較低的代碼複用。

二、WebWork 1、WebWork原理簡介

        從處理流程看,與Struts1非常類似,核心都由控制器組成,並且都分為兩個部分,核心控制器ServletDispatch和商務邏輯控制器Action。WebWork使用OGNL運算式語言,可以訪問值棧。並且建立在XWork之上,使用ServletDispatcher作為核心控制器,處理HTTP的響應和請求。支援更多的表現層技術,如FreeMarker和XSLT等。而且採用了一種更加松耦合的設計,使測試起來更加方便,允許系統從B/S結構向C/S結構轉換。

        資料流程圖如下:

       

2、優點

        (1)、Action無需與Servlet API耦合,更加容易測試。

        (2)、Action無需與WebWork耦合,代碼重用高

        (3)、支援更多的表現層技術。

三、Struts2 1、Struts2原理簡介

        Struts2採用了WebWork的設計核心,使用了大量的攔截器來處理使用者請求,從而允許使用者的商務邏輯控制器與Servlet API分離。Struts2控制器組件是Struts2架構的核心,事實上,所有MVC架構都是由控制器組件為核心的。正如前邊提到的,Struts2的控制器由兩個部分:FilterDispatcher和業務控制器Action。

        使用攔截器作為處理(Advice),以使用者的商務邏輯控制器為目標,建立一個控制器代理。控制器代理負責處理使用者請求,處理使用者請求時回調業務控制器的execute方法,該方法傳回值決定了呈現怎麼樣的視圖資源。

        Struts2的體系概圖如下:

       

2、Struts2處理流程

        (1)、瀏覽器發送請求。如mypage.action

        (2)、核心控制器FilterDispatcher根據請求決定調用合適的Action。

        (3)、WebWork的攔截器自動對請求應用通用功能,如workflow、validation或檔案上傳等

        (4)、回調Action的execute方法,該execute方法先擷取使用者請求參數,然後執行某種資料庫操作,即可以是儲存到資料庫,也可以檢索資訊。

        (5)、Action的execute方法處理結果資訊將被發送到瀏覽器中。而且支援很多的視圖技術。

3、Struts2與Struts1的對比

        (1)、在Action實作類別方面:Struts1要求Action繼承一個抽象基類,而不是介面;Struts2都可以實現,並且提供一個ActionSupport基類去實現常用的介面。

        (2)、線程模式方面:Struts1 Action是單例模式,必須是安全執行緒的,因為僅有一個Action執行個體來處理所有請求。Struts2沒有安全執行緒問題,因為Action對象為每一個請求產生一個執行個體。

        (3)、Servlet依賴方面:Struts1 Action依賴於Servlet API,但是Struts2不依賴。

        (4)、可測試方面:Struts1 Action不易於測試。Struts容易測試。

        (5)、運算式語言方面:Struts1可以使用JSTL,Struts2也可以用JSTL,但是更支援OGNL

        (6)、綁定值到視圖:Struts1採用jsp機制。Struts2採用valueStack技術,使標籤庫能訪問值,不需要把對象和視圖頁面綁定在一起。

        (7)、類型轉換:Struts1 ActionForm屬性通常都是String類型,使用Commons-Beanutils進行類型轉換,每一個類一個轉換器,轉換器不可配置。Struts2使用OGNL進行類型轉換,支援基礎資料型別 (Elementary Data Type)和常用對象之間的轉換。

        (8)、資料校正:Struts1支援在ActionForm重寫validate方法,手動校正,或者通過Commons alidator架構完成校正。Struts2支援重寫validate方法,也支援XWork校正。

        (9)、Acion執行控制:Struts1每一個模組對應一個請求處理,每個模組必須共用相同的生命週期。Struts2支援通過攔截器堆棧為每一個Action建立不同的生命週期。開發人員可以根據需要建立相應堆棧,從而和不同的Action一起使用。

Struts1、WebWork、Struts2介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.