1. 程式人生 > >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。

一個請求在Struts 2框架中的處理大概分為以下幾個步驟。

 客戶端提交一個(HttpServletRequest)請求,如上文在瀏覽器中輸入http://localhost: 8080/bookcode/ch2/Reg.action就是提交一個(HttpServletRequest)請求。tomcat接收到這個請求後,會檢查一下應該交給哪個web程式處理,現在是交給Struts去處理,然後Struts會去參考此程式下的配置檔案web.xml,在web.xml中找到過濾器(Filter),

 請求被提交到一系列(主要是3層)的過濾器(Filter),如(ActionContextCleanUp、其他過濾器(SiteMesh等)、FilterDispatcher)。注意:這裡是有順序的,先ActionContext CleanUp,再其他過濾器(Othter Filters、SiteMesh等),最後到FilterDispatcher。

FilterDispatcher是控制器的核心,就是MVC的Struts 2實現中控制層(Controller)的核心。

FilterDispatcher詢問ActionMapper是否需要呼叫某個Action來處理這個(HttpServlet Request)請求,如果ActionMapper決定需要呼叫某個Action,FilterDispatcher則把請求的處理交給ActionProxy。

ActionProxy通過Configuration Manager(struts.xml)詢問框架的配置檔案,找到需要呼叫的Action類。例如,使用者註冊示例將找到UserReg類。

ActionProxy建立一個ActionInvocation例項,同時ActionInvocation通過代理模式呼叫Action。但在呼叫之前,ActionInvocation會根據配置載入Action相關的所有Interceptor(攔截器)。

 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果result。

Struts 2的核心控制器是FilterDispatcher,有3個重要的方法:destroy()、doFilter()和Init(),可以在Struts 2的下載資料夾中找到原始碼。

FilterDispatcher中三個重要的方法: