1. 程式人生 > >Struts2框架及實現原理和工作流程

Struts2框架及實現原理和工作流程

Struts2為提供了一個為使用者快速構建應用程式的平臺。
Struts2是基於OpenSymphony的網路工程框架。
Struts2實現模型檢視控制器(MVC)設計模式。
在Struts2的模型、檢視和控制器中分別實現了Action,result和FilterDispatcher。
該控制器的工作是將使用者的請求(request)對映到適當的action。
Struts2 的 FilterDispatcher 進行著控制器的工作。
模型包含資料和業務邏輯。
在Struts2 的模型中,實現了Action部分。
檢視是MVC模式的顯示部分。

Struts 2的檢視是一般是使用JSP,Velocity Template,Freemaker或其他表示層技術實現的


控制器接收使用者請求(request),並確定哪些Struts2的Action被呼叫。
框架建立一個Action例項 關聯ActionInvocation新建立的例項。
Struts2呼叫的action應該通過一系列應用程式的XML檔案中定義的攔截器攔截處理。
框架呼叫ActionInvocations invoke()方法開始執行action。
當每次invoke()方法被呼叫,ActionInvocation諮詢其狀態並執行下一個攔截器。
ActionInvocation控制堆疊中通過呼叫interceptors intercept()方法的攔截器。
攔截器的intercept()方法依次呼叫ActionInvocation 的invoke()方法直到所有攔截器都被呼叫,最後action本身將被呼叫,相應的結果將返回給使用者。
一些攔截器工作在Action執行之前,一些攔截器工作在Action執行之後,這沒有必要的,它應該在每次呼叫的時候都工作。這些攔截器是呼叫之前和之後的都執行。
首先是所有的攔截器按著他們在棧中定義的順序執行。
當action被呼叫,result將生成。

再次,所有的攔截器按目前堆疊相反的順序呼叫。


Strut2的另外2個重要特徵是ONGL和ValueStack。
Object-Graph Navigation Language (OGNL) 是一種強大的表示式語言是用來查詢和操縱ValueStack中的資料。
OGNL幫助資料傳輸和型別轉換。
OGNL表示式語言提供簡化stytax引用Java物件。
OGNL被用於繫結Java端資料屬性的string-based檢視層。


總結:


客戶端提交一個(HttpServletRequest)請求,請求被提交到一系列(主要是3層)的過濾器(Filter),如(ActionContextCleanUp、其他過濾器(SiteMesh等)、 FilterDispatcher)。注意:這裡是有順序的,先ActionContext CleanUp,再其他過濾器(Othter Filters、SiteMesh等),最後到FilterDispatcher。


FilterDispatcher是控制器的核心,就是MVC的Struts 2實現中控制層(Controller)的核心。


FilterDispatcher詢問ActionMapper是否需要呼叫某個Action來處理這個(HttpServlet Request)請求,如果ActionMapper決定需要呼叫某個Action,FilterDispatcher則把請求的處理交給ActionProxy。


ActionProxy通過Configuration Manager(struts.xml)詢問框架的配置檔案,找到需要呼叫的Action類。例如,使用者註冊示例將找到UserReg類。


ActionProxy建立一個ActionInvocation例項,同時ActionInvocation通過代理模式呼叫Action。但在呼叫之前,ActionInvocation會根據配置載入Action相關的所有Interceptor(攔截器)。


一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果result。