Struts2 架構與運行流程

「Struts2是一個基於MVC(Model View Controller)設計模式的Web應用框架,它本質上至關於一個Servlet,在MVC設計模式中,Struts2做爲控制器(Controller)來創建模型(Model)與視圖(View)的數據交互」。

先來看一張Struts2官方文檔提供的Struts2架構圖:
設計模式

  • Servlet Filters(橙色):過濾鏈,全部的請求都要通過Filter處理。
  • Struts Core(淺藍色):Struts2的核心部分,Struts2已經作好的功能,開發中不須要動它們。
  • Interceptors(淺綠色):Struts2的攔截器。Struts2提供了不少默認的攔截器,幫助開發者完成絕大部分工做。開發者也能夠自定義攔截器,來實現具體的功能。
  • User Created(淺黃色):這一部分須要由開發人員完成,包括struts.xml、Action、Template等。

1. FilterDispatcher

_FilterDispatcher_是任何一個Struts2應用都須要配置的,通常出如今過濾器的最後;若是在FilterDispatcher前出現瞭如SiteMesh這種特殊的過濾器,還必須在SiteMess前應用Struts2的ActionContextCleanUp過濾器。
FilterDispatcher將請求轉發給ActionMapper。緩存

2. ActionMapper

ActionMapper負責識別當前的請求是否須要Struts2作出處理。
當ActionMapper告訴FilterDispatcher須要處理這個請求時,FilterDispatcher會中止過濾鏈以後的部分,因此一般FilterDispatcher應該出如今過濾鏈的最後。而後創建一個ActionProxy對象,這個對象做爲Action於XWork之間的中間層,會代理Action的運行過程。服務器

3. ActionProxy

ActionProxy對象被建立出來時,並不知道要運行哪一個Action,它手裏只有從FilterDispatcher中拿到的請求URL。這時,它去ConfigurationManager詢問到底要運行哪一個Action。架構

4. ConfigurationManager

在服務器啓動的時候,ConfigurationManager負責將struts.xml文件從配置文件映射到內存中,並緩存起來,以保證ActionProxy拿着來訪問的URL向它詢問要運行哪個Action的時候,就能夠直接匹配,查找並回答出來。
ActionProxy知道了要運行的那個Action,相關的攔截器以及全部可能使用的Result信息,就能夠着手創建ActionInvocation對象了,ActionInvocation對象描述了Action運行的整個過程。app

5. ActionInvocation

ActionInvocation對象執行的時候會作不少事情:框架

  • 首先按照攔截器的應用順序依次執行各個攔截器的前置部分;
  • 而後執行Action的execute()方法;
  • 根據execute()返回的結果,在struts.xml中匹配選擇下一個頁面
  • ActionInvocation對象再按照攔截器的引用順序倒序依次執行各個攔截器的後置部分。

ActionInvocation對象執行完畢以後,實際上已經獲得了響應對象,也就是HttpServletResponse對象,最終向用戶顯示響應的結果。
spa

End...設計

相關文章
相關標籤/搜索