標籤:style blog http io 使用 java ar strong 檔案
一個請求在Struts2架構中的處理大概分為以下幾個步驟:
1 用戶端發送請求;
2 這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其他架構的整合很有協助,例如:SiteMesh Plugin)
3 接著FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調用某個Action。FilterDispatcher的功能如下:
(1)執行Actions
(2)清除ActionContext
(3)維護靜態內容
(4)清除request生命週期內的XWork的interceptors
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
攔截器與過濾器:
1、攔截器是基於java反射機制的,而過濾器是基於函數回調的。2、過濾器依賴於servlet容器,而攔截器不依賴於servlet容器。
3、攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請求起作用。
4、攔截器可以訪問Action上下文、值棧裡的對象,而過濾器不能。
5、在Action的生命週期中,攔截器可以多次調用,而過濾器只能在容器初始化時被調用一次。
在上述過程中所有的對象(Action,Results,Interceptors,等)都是通過ObjectFactory來建立的。
Struts2的目標很簡單--使Web開發變得更加容易。為了達成這一目標,Struts2中提供了很多新特性,比如智能的預設設定、annotation的使用以及"慣例重於配置"原則的應用,而這一切都大大減少了XML配置。Struts2中的Action都是POJO,這一方面增強了Action本身的可測試性,另一方面也減小了架構內部的耦合度,而HTML表單中的輸入項都被轉換成了恰當的類型以供action使用。開發人員還可以通過攔截器(可以自訂攔截器或者使用Struts2提供的攔截器)來對請求進行預先處理和後處理,這樣一來,處理請求就變得更加模組化,從而進一步減小耦合度。模組化是一個通用的主題--可以通過外掛程式機制來對架構進行擴充;開發人員可以使用自訂的實現來替換掉架構的關鍵類,從而獲得架構本身所不具備的功能;可以用標籤來渲染多種主題(包括自訂的主題);Action執行完畢以後,可以有多種結果類型--包括渲染JSP頁面,Velocity和Freemarker模板,但並不僅限於這些。
struts2執行原理(執行流程)(轉)