Struts2訪問流程和架構
Struts2訪問流程和架構
一、訪問流程:
描述執行流程
( 1 ). 客戶端初始化一個指向Servlet容器(例如Tomcat)的請求 (客戶端提交一個HttpServletRequest請求。)
(2)請求被提交到一系列的過濾器(Filter)。
如(ActionContextCleanUp、其他過濾器(SiteMesh等)、 FilterDispatcher。注意:這裡是有順序的,先ActionContext CleanUp,再其他過濾器(Othter Filters、SiteMesh等),最後到FilterDispatcher。
FilterDispatcher是控制器的核心,就是MVC的Struts 2實現中控制層(Controller)的核心。
常規情況官方推薦使用StrutsPrepareAndExecuteFilter替代FilterDispatcher。
(3)FilterDispatcher詢問ActionMapper是否需要呼叫某個Action來處理這個(HttpServlet Request)請求,如果ActionMapper決定需要呼叫某個Action,FilterDispatcher則把請求的處理交給ActionProxy。
(4) ActionProxy通過Configuration Manager(struts.xml)詢問框架的配置檔案,找到需要呼叫的Action類。
(5)ActionProxy建立一個ActionInvocation例項,同時ActionInvocation通過代理模式呼叫Action。(有點類似與遞迴操作),但在呼叫之前,ActionInvocation會根據配置載入Action相關的所有Interceptor(攔截器)。
(6)Action執行完畢後,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果result。
二、struts2架構(內部執行流程)
1)客戶端發出HTTP請求
(2)然後請求被核心過濾器StrutsPrepareAndExecuteFilter攔截
(3)核心過濾器將請求轉發到Action對映器,Action對映器負責識別當前的請求是否需要交由Struts2處理。
(4)Action對映器返回需要struts2處理的資訊,StrutsPrepareAndExecuteFilter會建立一個Action代理
(5)Action代理並不知道執行哪一個Action,它會向配置管理器詢問呼叫哪一個Action,配置管理器會從struts.xml讀取我們配置的Action資訊。
(6)Action代理建立相關請求的Action物件,呼叫相關的方法之前,struts2的一系列攔截器會幫我們做一些操作,例如獲取請求引數等。
(7)然後呼叫execute方法根據返回的字串去匹配相應的頁面,
(8)頁面可以獲取一些頁面模板,然後生成最終頁面,再倒序的執行攔截器的後續操作
(9)最後生成HTTP響應內容