「Struts2是一個基於MVC(Model View Controller)設計模式的Web應用框架,它本質上至關於一個Servlet,在MVC設計模式中,Struts2做爲控制器(Controller)來創建模型(Model)與視圖(View)的數據交互」。
先來看一張Struts2官方文檔提供的Struts2架構圖:設計模式
_FilterDispatcher_是任何一個Struts2應用都須要配置的,通常出如今過濾器的最後;若是在FilterDispatcher前出現瞭如SiteMesh這種特殊的過濾器,還必須在SiteMess前應用Struts2的ActionContextCleanUp過濾器。
FilterDispatcher將請求轉發給ActionMapper。緩存
ActionMapper負責識別當前的請求是否須要Struts2作出處理。
當ActionMapper告訴FilterDispatcher須要處理這個請求時,FilterDispatcher會中止過濾鏈以後的部分,因此一般FilterDispatcher應該出如今過濾鏈的最後。而後創建一個ActionProxy對象,這個對象做爲Action於XWork之間的中間層,會代理Action的運行過程。服務器
ActionProxy對象被建立出來時,並不知道要運行哪一個Action,它手裏只有從FilterDispatcher中拿到的請求URL。這時,它去ConfigurationManager詢問到底要運行哪一個Action。架構
在服務器啓動的時候,ConfigurationManager負責將struts.xml文件從配置文件映射到內存中,並緩存起來,以保證ActionProxy拿着來訪問的URL向它詢問要運行哪個Action的時候,就能夠直接匹配,查找並回答出來。
ActionProxy知道了要運行的那個Action,相關的攔截器以及全部可能使用的Result信息,就能夠着手創建ActionInvocation對象了,ActionInvocation對象描述了Action運行的整個過程。app
ActionInvocation對象執行的時候會作不少事情:框架
ActionInvocation對象執行完畢以後,實際上已經獲得了響應對象,也就是HttpServletResponse對象,最終向用戶顯示響應的結果。spa
End...設計