Struts2 框架

1 客戶端初始化一個指向Servlet容器(例如Tomcat)的請求web

2 這個請求通過一系列的過濾器(Filter)(這些過濾器中有一個叫作ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其餘框架的集成頗有幫助,例如:SiteMesh Plugin)api

3 接着StrutsPrepareAndExecuteFilter被調用,它詢問ActionMapper來決定這個請是否須要調用某個Action安全

4 若是ActionMapper決定須要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy架構

5 ActionProxy經過Configuration Manager詢問框架的配置文件,找到須要調用的Action類app

6 ActionProxy建立一個ActionInvocation的實例。框架

7 ActionInvocation實例使用命名模式來調用,在調用Action的過程先後,涉及到相關攔截器(Intercepter)的調用。性能

8 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果一般是(也 能是另外的一個Action鏈)一個須要被表示的JSP或者FreeMarker的模版。在表示的過程當中可使用Struts2 框架中繼承的標籤。在這個過程當中須要涉及到ActionMapper
在上述過程當中全部的對象(Action,Results,Interceptors,等)都是經過ObjectFactory來建立的。測試

Struts2和struts1的比較spa

    從體系結構來看:struts2大量使用攔截器來處理請求,從而容許與業務邏輯控制器 與 servlet-api分離,避免了侵入性(所謂侵入性就是指的這個架構設計出來的部件對系統的影響範圍,好比框架的侵入性就很高,由於在一個工程中引入一個框架,你的整個設計都必須圍繞這個框架來進行,一旦使用了,框架的可替代性幾乎爲0,這樣子就是高侵入性。組件的侵入性就比較低);而struts1.x在action中明顯的侵入了servlet-api.線程

    從線程安全分析:struts2.x是線程安全的,每個對象產生一個實例,避免了線程安全問題;而struts1.x在action中屬於單線程。

    性能方面:struts2.x測試能夠脫離web容器,而struts1.x依賴servlet-api,測試須要依賴web容器。

    請求參數封裝對比:struts2.x使用ModelDriven模式,這樣咱們 直接 封裝model對象,無須要繼承任何struts2的基類,避免了侵入性。

    標籤的優點:標籤庫幾乎能夠徹底替代JSTL的標籤庫,而且 struts2.x支持強大的ognl表達式。

    固然,struts2和struts1相比,在文件上傳,數據校驗 等方面也 方便了好多。

相關文章
相關標籤/搜索