2009年1月5日 星期一

[Struts2] How Struts2 works

在這裡,我們將會詳細的描述 Struts2 實際處理的流程。首先,我們先給一張運作圖,如圖一。

image 圖一 Struts2 流程

在這張詳細的流程圖中,我們看到了很多在之前沒有看過的元件:Interceptor、ActionContext、ValueStack 與 OGNL。

由這張圖中可以簡單的瞭解當 FilterDispatcher 根據 action name 所對應到 struts.xml 中的 Action class 之後,Struts2 核心會先呼叫 Interceptor Stack 中的所有 interceptors。接著再呼叫 Action class 中的 execute() method,完成後再呼叫 Result 幫助我們排版,這過程中都會使用到 OGNL 到 ValueStack 中幫助我們取得必要的資料。

接下來我將會描述各個部份的元件。

Interceptor Stack

Interceptor Stack 是在整個流程中第一個被呼叫的,也是最後一個被呼叫的。Interceptor Stack 中包含一集合的 interceptors,而 interceptors 的排列方式是以 stack 的方式排列。Interceptor 提供一種定義各種 workflow 而且以 cross-cutting 的架構,這樣的架構可以使得程式可以很輕易的重複利用,並且可以降低 interceptor 與 Struts2 整體架構的 coupling。

之後我們將會更仔細的描述 interceptor 的全貌,現在先給你一個簡單的概念。

ActionContext, ValueStack 與 OGNL

在 Struts2 中,所有的資料都是儲存在 ActionContext 之中,在這裡,我並不會深入描述 ActionContext,因為現在對你來說還太過於 detail。不過由圖中可以知道,ActionContext 是整個資料 pool 中最上層,而 ValueStack 是屬於其中一個,當然,ActionContext 中還包含了 JSP 的 request, session 等。

ValueStack 在 Struts2 中扮演著資料儲存的主要位置,例如我們所撰寫的 Action 會被置於 ValueStack 中,這也包含了 Action 中的所有變數。而 OGNL 是用來處理存取 ActionContext 中的資料。

關於 ActionContext, ValueStack 與 OGNL 的詳細描述,我也會在之後在詳加說明。

這個部份,我希望你可以先瞭解整個 Struts2 的概觀,至於詳細的細節,之後將會一一的交代。

沒有留言: