Struts2執行流程/配置檔案載入順序/架構相關描述
一丶為何設計配置檔案載入
Struts2框架起源,Struts2是一個基於MVC設計模式的web應用框架,它實質上相當於Servlet的功能.它是基於Struts1的基礎上集合優秀的web框架WebWork採用攔截器的機制來處理使用者請求.低耦合.
二丶Struts2的執行流程圖
一個請求進行提交到伺服器,Tomcat進行載入配置檔案進行執行Struts2過濾器的攔截,訪問到對應的Action類下對應的執行方法.當方法執行完後(在沒有異常的情況下)將會返回一個返回集,根據Struts2的配置檔案指定跳轉到對應的頁面或是其他Action.下圖是Struts2的執行流程圖.
三丶Struts2的架構
一個請求在Struts2框架中的處理大致分為以下幾個步驟:
1、客戶端初始化一個指向Servlet容器(例如Tomcat)的請求;
2、這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其他框架的整合很有幫助,例如:SiteMesh Plugin);
3、接著FilterDispatcher被呼叫,FilterDispatcher詢問ActionMapper來決定這個請求是否需要呼叫某個Action;
4、如果ActionMapper決定需要呼叫某個Action,FilterDispatcher把請求的處理交給ActionProxy;
5、ActionProxy通過Configuration Manager詢問框架的配置檔案,找到需要呼叫的Action類;
6、ActionProxy建立一個ActionInvocation的例項。
7、ActionInvocation例項使用命名模式來呼叫,在呼叫Action的過程前後,涉及到相關攔截器(Intercepter)的呼叫。
8、一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可能是另外的一個Action鏈)一個需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2框架中繼承的標籤。在這個過程中需要涉及到ActionMapper。
四丶Struts2的配置檔案載入順序
Struts2的核心過濾器主要負責請求分發,將獲取到的請求進行轉向指定的位置,過濾器是帶有生命週期的物件,Struts2核心過濾器我們從web.xml中StrutsPrepareAndExecuteFilter的配置資訊開始著手走。
1、在核心過濾器StrutsPrepareAndExecuteFilter類中找到init方法,並找到init.initDispatcher()方法,進入該方法下的 dispatcher.init()方法;我們可以看到Struts2在初始化的時候按順序進行載入的檔案的順序:
init_DefaultProperties(); // [1]
init_TraditionalXmlConfigurations(); // [2]
init_LegacyStrutsProperties(); // [3]
init_CustomConfigurationProviders(); // [5]
init_FilterInitParameters() ; // [6]
init_AliasStandardObjects() ; // [7]
上訴程式碼執行對應的載入配置檔案的順序:
1.init_DefaultProperties(); // [1]載入org.apache.struts2.default.properties的配置檔案,配置的是Struts2的所有常量;
2.init_TraditionalXmlConfigurations(); // [2]
載入Struts-default.xml/struts-plugin.xml/struts.xml檔案
作用:配置了bean,interceptor,result等。
位置:在struts的core核心jar包.
3.init_LegacyStrutsProperties(); // [3]
載入使用者自定義Struts.properties檔案
struts2框架中所使用的外掛的配置檔案
4.init_CustomConfigurationProviders(); // [5]
載入使用者配置的提供物件.
5.init_FilterInitParameters() ; // [6]
載入web.xml 檔案
6.init_AliasStandardObjects() ; // [7]
載入標準物件
根據上面的配置檔案我們可以得出Struts 2的配置檔案載入順序,如下:
1.default.properties
2.struts-defualt.xml
3.struts-plugin.xml
4.struts.xml //配置Action以及常量
5.struts.properties //配置常量
6.web.xml //配置核心過濾器以及常量