struts首先是MVC框架
MVC是一種設計模式
將應用程序分成了視圖、模型、控制器三部分,使代碼邏輯清晰,同時提高移植性
M與V之間--觀察者模式
V與C之間--策略模式
MVC的工作流程
請求----控制器調用模型處理,返回數據-----控制器用相應的視圖格式化模型返回的數據完成相應
Struts2在以上流程中解決了三個問題:
1. 控制器如何根據用戶的請求決定調用哪個模型(具體是模型中的Action組件)進行處理
2. 如何在業務邏輯處理器與serv let API 分離的情況下使處理器獲得請求參數,並得以執行
3. 如何將處理后返回的數據傳給相應的視圖生成動態網頁響應給用戶
結合Struts的請求流程加以說明

客戶端請求----經三個過濾器(ActionContextCleanUp,其他過濾器,到FilterDispatcher核心控制器)
FilterDispatcher詢問ActionMapper是否需要調用Action來處理,如果ActionMapper決定調用,FilterDispatcher就把對請求的處理交給了ActionProxy
ActionProxy通過Configuration Manager 詢問框架的配置文件,找到需要調用的Action類
ActionProxy創建一個ActionInvocation實例,同時ActionInvocation通過代理模式調用Action,但在調用之前ActionInvocation會根據配置加載Action相關的攔截器,每執行完一個
攔截器,會調用invocation的invoke方法,把請求傳給下個Interceptor,所有的Interceptor執行完以后,會執行Action
Action執行根據后,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果
這個返回結果可能是一個 需要表示為JSP或FreeMarker的模板,或者是另一個Action鏈
如果是前者,表示的過程中可以使用struts2的標簽,生成動態網頁后返回給用戶
如果是后者,則再把上述過程執行一遍