圖文解析Struts2框架執行流程


 

struts的架構圖

(1)提交請求

客戶端通過HttpServletRequest向servlet容器(即tomcat)提交一個請求

請求經過一系列的過濾器,例如圖中的ActionContextCleanUp和Other filter(SlterMesh,etc)等,最后被struts的核心過濾器FilterDispatcher控制到。

注:核心控制器2.1.3版本之后,struts的filterDispatcher核心控制器變成了StrutsPrepareAndExecuteFilte,如圖:

 

被核心控制器控制到之后才會訪問Actionmapper來決定是否調用某個action(即用戶是否要請求某個action)。如果是其他資源請求例如jsp頁面,不會用到action。

(2)移交控制權

如果要用到action,核心控制器將控制權交給ActionProxy(即是action的代理)。

ActionProxy獲得控制權之后通過ConfigurationManager對象加載核心配置文件struts.xml。

Struts的action在這個配置文件進行配置,所以要加載它。

(3)創建ActionInvocation的實例

如果在struts.xml找到需要調用的action, ActionProxy會創建一個ActionInvocation的實例。

(4)調用action前的攔截器

攔截器是struts2非常重要的概念,是核心功能實現。Struts中的大部分功能通過攔截器實現。

Actioninvocation包括創建的action實例,同時包括另外非常重要的一部分------攔截器。

調用action前后還會調用很多的攔截器。

在調用action之前會依次調用用戶所定義的攔截器。

(5)調用action的業務方法進行業務處理

 當把action前的攔截器執行完之后才會調用action的業務方法進行業務處理,

然后返回一個Result(業務方法對應String類型的返回值,即是字符串,例如SUCCESS,INPUT,ERROR,NONE,LOGIN和用戶自己在struts對應定義result標簽name屬性的值)

 

(6)匹配result

然后根據返回的字符串來調度我們的視圖來匹配我們的struts.xml中對應action標簽中的result標簽。

一般來說返回一個jsp的頁面,或者調用另外某一個action。

 

(7)反向執行攔截器

當返回視圖之后並沒有真正響應用戶,還需要把執行過的攔截器倒過來反向執行一遍。

(8)響應客戶端

當這些攔截器被反向執行之后,通過HttpServletResponse響應客戶端的請求。

 

struts2框架執行流程大致這樣,如有不對,敬請指出,謝謝!

 


免責聲明!

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



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