java架構篇---Struts2的處理流程

來源:互聯網
上載者:User

標籤:

一、Struts2的處理流程:

  •  用戶端產生一個HttpServletRequest的請求,該請求被提交到一系列的標準過濾器(Filter)組建鏈中(如ActionContextCleanUp:它主要是清理當前線程的ActionContext、Dispatcher,FilterDispatcher主要是通過ActionMapper來決定需要調用那個Action,FilterDispatcher是控制器的核心,也是MVC中控制層的核心組建)。
  • 核心控制器組建FilterDispatcher根據ActionMapper中的設定獲得是否需要調用某個Action組建來處理這個HttpServletRequest請求,如果ActionMapper決定調用某個Action組建,FilterDispatcher核心控制器組建就會把請求的處理權委託給ActionProxy組建
  • ActionProxy組建通過Configuration Manager組建獲得Struts2架構的設定檔struts.xml,最後找到需要調用的目標Action組建類,然後ActionProxy組建就建立出一個實現了命令模式的ActionInvocation類的對象執行個體類的對象執行個體(這個過程包括調用Anction組建本身之前調用多個的攔截器組建的before()方法 )同時ActionInvocation組建通過代理模式調用目標Action組建。但是在調用之前ActionInvocation組建會根據設定檔中的設定項目載入與目標Action組建相關的所有攔截器組建(Interceptor)。
  • 一旦Action組建執行完畢,ActionInvocation組建將根據開發人員在Struts2.xml設定檔中定義的各個設定項目獲得對象的返回結果--為這個Action組建的結果碼(一個像SUCCESS,INPUT)然後根據該返回的結果調用目標JSP頁面以實現顯示輸出。
  • 最後各個攔截器組建會被再次執行(但是順序和開始時相反,並調用after()方法),然後請求最終被返回給系統的部署檔案中配置的其他過濾器,如果已經設定了ActionContextCleanUp過濾器,那麼FilterDispatcher就不會清理在ThreadLocal對象中儲存的ActionContext資訊。如果沒有設定ActionContextCleanUp過濾器,FilterDispatcher就會清除掉所有的ThreadLocal對象。

   更加清晰的來說就是:

    1.用戶端初始化一個指向servlet容器的請求。

    2.請求經過一系列的過濾器(ActionContextCleanUp、SiteMesh)

    3.FilterDispatcher被調用,並詢問ActionMapper來決定這個請求是否需要調用某個Action

    4.ActionMapper決定要調用那一個Action,FilterDispatcher把請求交給ActionProxy。

   5. ActionProxy通過Configurate Manager詢問Struts設定檔,找到要調用的Action類

   6. ActionProxy建立一個ActionInvocation執行個體

   7. ActionInvocation執行個體使用命令模式來調用,回調Action的exeute方法

   8. 一旦Action執行完畢,ActionInvocation負責根據Struts.xml的配置返回結果。

 

二、比較重要的類的介紹:

         ActionMapper其實是HttpServletRequest和Action調用請求的一個映射,他屏蔽了Action對於Request等Java servlet類的依賴。Struts2中它的預設實作類別是DefaultAtionMapper,ActionMapper很大的用處可以根據自己的需要來設計url格式,它自己也有Restful的具體實現。

         ActionProxy和ActionInvocation:

    Action的一個代理,由ActionProxyFactory建立,它本身不包括Action執行個體,預設實現DefaultActionProxy是由ActionInvocation持有Action執行個體。ActionProxy作用是如何取得Action,無論是本地還是遠程。而ActionInvocation的作用是如何執行Action,攔截器的功能就是咱ActionInvocation中實現的。

       ConfigurateProvider和Configuration

        ConfigurationProvider就是Struts2中設定檔的解析器,Struts2中的設定檔主要是實現XmlConfigurationProvider及其子類StrutsXmlConfigurationProvider來解析。

Struts2請求處理:

java架構篇---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.