1. 程式人生 > 實用技巧 >【Struts2】02 過程分析

【Struts2】02 過程分析

首先是訪問了這個地址:

http://localhost:8080/hello.action

請求訪問的第一個資源是工程設定的過濾器:

 <filter>
     <filter-name>Struts2-Filter</filter-name>
     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 </filter>
 <filter-mapping>
     <
filter-name>Struts2-Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

過濾器在伺服器啟動時建立,而Servlet預設是在被首次訪問的時候建立

過濾器的執行過程:

1、獲取到請求路徑

2、得到請求的URL配置的名稱:hello.action

3、找到並讀取src目錄下的struts.xml配置檔案

4、讀取使用DOM4J進行解析

5、得到的URL名稱值與XML解析的action標籤中的name屬性進行匹配

6、匹配成功,找到action標籤中的class屬性的值,即是訪問的資源類

7、找到HelloAction訪問類的預設方法execute【使用反射實現】

// 通過action標籤配置的class屬性得到這個類
Class<?> HelloActionClass = Class.forName("cn.dzz.action.HelloAction");
// 預設獲取execute方法物件
Method executeMethod = HelloActionClass.getDeclaredMethod("execute");
// 呼叫方法
Object invoke = executeMethod.invoke(HelloActionClass.newInstance());
// 我們的方法返回了字串OK ,判斷結果,如果是字串則得到這個字串OK if (invoke instanceof String) { String urlMapping = invoke.toString(); }

8、通過urlMapping與這個action標籤的result標籤的name進行匹配,讀取標籤的值,就是要訪問的資源頁面

原始碼分析:

org\apache\struts2\dispatcher\ng\filter\StrutsPrepareAndExecuteFilter.class

Struts2的這個過濾器,通過重寫init方法,載入Struts2的配置檔案,初始化攔截器的配置資訊

同時包含我們自己編寫的配置檔案

初始化分發器:

下面又有一個空參的初始化方法

init.initDispatcher(config);

按照順序載入了這些配置檔案:

所在類:

org.apache.struts2.dispatcher.Dispatcher

其中第三個配置方法,可以看到這個:

也就是我們自己配置的struts.xml