標籤:常用 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介紹