WebWork框架的處理流程(2)

都說Struts 2與Struts 1相差太大,Struts 2是從webWrok發展而來的,那什麼是WebWord呢??看看下面的介紹.
1.3.1 WebWork框架
WebWork 2建立在Xwork之上,處理HTTP的響應和請求。WebWork 2使用ServletDispatcher將HTTP請求的變成Action(業務層Action類)、Session(會話)、Application(應用程序)範圍的映射及Request請求參數映射。WebWork 2支持多視圖表示,視圖部分可以使用JSP、Velocity、FreeMarker、JasperReports、XML等。
從處理流程上來看,WebWork與Struts 1非常類似,它們的核心都由控制器組成,其中控制器都由兩個部分組成:
  • 核心控制器ServletDispatcher;
  • 業務邏輯控制器Action。

WebWork改變了Struts 1嚴重依賴Servlet API的缺陷,使得WebWork更加靈活,並給測試工作帶來了方便。圖1.8顯示了WebWork工作流程。 

 

(1)一個初始的請求被髮送到Servlet容器(如Tomcat或Resin),這個請求經過一個標準的Filter鏈,其中包括(可選的)ActionContextCleanUp Filter,如果要在應用程序中整合其他的技術如SiteMesh,就需要使用這個Filter。然後請求經過FilterDispatcher(注:WW2.2之前處理這個請求的是ServletDispatcher),在它裏面ActionMapper會判斷這個請求是否需要調用Action。
(2)如果ActionMapper決定應該調用一個Action,FilterDispatcher就把請求委託給ActionProxy,ActionProxy通過WebWork的配置文件管理器讀取xwork.xml文件裏的配置信息。然後創建一個實現了命令模式的ActionInvocation。這一過程包括在調用action本身之前調用所有的Interceptor(before()方法)。
(3)一旦Action方法返回,ActionInvocation就要查找xwork.xml文件中這個Action的結果碼(Action Result Code)(一個String如success、input)所對應的result,然後執行這個result。通常情況下,result會調用JSP或FreeMarker模板來呈現頁面(但不總是這樣,例如result也可以是一個Action鏈)。當呈現頁面時,模板可以使用WebWork提供的一些標籤,其中一些組件可以和ActionMapper一起工作來爲後面的請求呈現恰當的URL。
(4)最後Interceptor被再次執行(順序和開始相反,調用after()方法),然後最終請求被返回給web.xml中配置的其他Filter。如果已經設置了ActionContextCleanUpFilter,那麼FilterDispatcher就不會清理ThreadLocal中的ActionContext信息。如果沒有設置ActionContextCleanUp Filter,FilterDispatcher會清理掉所有的ThreadLocal。
發佈了47 篇原創文章 · 獲贊 4 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章