struts2的執行原理(執行流程,過濾器和攔截器)


 

 

 

 

 

 

 

 

 

 

 

 

 

 

一個請求在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模板,但並不僅限於這些。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM