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


一、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請求處理示意圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM