Struts 的體系結構與工作原理
MVC 即 Model-View-Controller 的縮寫,是一種常用的設計模式。 MVC 減弱了業務邏輯接口和數據接口之間的耦合,以及讓視圖層更富於變化。 MVC 的工作原理 , 如下圖-1 所示:
MVC 即 Model-View-Controller 的縮寫,是一種常用的設計模式。 MVC 減弱了業務邏輯接口和數據接口之間的耦合,以及讓視圖層更富於變化。 MVC 的工作原理 , 如下圖-1 所示:

圖-1
Struts 是 MVC 的一種實現,它將 Servlet 和 JSP 標記(屬於 J2EE 規范)用作實現的一部分。 Struts 繼承了 MVC 的各項特性,並根據 J2EE 的特點,做了相應的變化與擴展。 Struts 的體系結構與工作原理如下圖 2 所示:

圖-2
圖-2 中我們可以知道, Struts 的體系結構包括模型( Model ),視圖( View )和控制器( Controller )三部分。
下面讓我們從 MVC 角度來看看 struts 的體系結構( Model 2 )與工作原理:
1 )模型( Model )
在 Struts 的體系結構中,模型分為兩個部分:系統的內部狀態和可以改變狀態的操作(事務邏輯)。內部狀態通常由一組 Actinform Bean 表示。根據設計或應用程序復雜度的不同,這些 Bean 可以是自包含的並具有持續的狀態,或只在需要時才獲得數據(從某個數據庫)。大型應用程序通常在方法內部封裝事務邏輯(操作),這些方法可以被擁有狀態信息的 bean 調用。比如購物車 bean ,它擁有用戶購買商品的信息,可能還有 checkOut() 方法用來檢查用戶的信用卡,並向倉庫發定貨信息。 小型程序中,操作可能會被內嵌在 Action 類,它是 struts 框架中控制器角色的一部分。當邏輯簡單時這個方法很適合。 建議用戶將事務邏輯(要做什么)與 Action 類所扮演的角色(決定做什么)分開。
2 )視圖( View )
視圖主要由 JSP 建立, struts 包含擴展自定義標簽庫( TagLib ),可以簡化創建完全國際化用戶界面的過程。目前的標簽庫包括: Bean Tags 、 HTML tags 、 Logic Tags 、 Nested Tags 以及 Template Tags 等。
3 )控制器( Controller )
在 struts 中,基本的控制器組件是 ActionServlet 類中的實例 servelt ,實際使用的 servlet 在配置文件中由一組映射(由 ActionMapping 類進行描述)進行定義。對於業務邏輯的操作則主要由 Action 、 ActionMapping 、 ActionForward 這幾個組件協調完成的,其中 Action 扮演了真正的業務邏輯的實現者, ActionMapping 與 ActionForward 則指定了不同業務邏輯或流程的運行方向。 struts-config.xml 文件配置控制器。
流程:在Struts中,用戶的請求一般以*.do作為請求服務名,所有的*.do請求均被指向ActionSevlet,ActionSevlet根據Struts-config.xml中的配置信息,將用戶請求封裝成一個指定名稱的FormBean,並將此FormBean傳至指定名稱的ActionBean,由ActionBean完成相應的業務操作,如文件操作,數據庫操作等。每一個*.do均有對應的FormBean名稱和ActionBean名稱,這些在Struts-config.xml中配置。
核心:Struts的核心是ActionSevlet,ActionSevlet的核心是Struts-config.xml。
Struts 體系結構中的組件

圖-3
圖-3 顯示了 ActionServlet (Controller) 、 Actionform (form State) 和 Action (Model Wrapper) 之間的最簡關系。
體系結構中所使用的組件如下表:
ActionServlet 控制器
ActionClass 包含事務邏輯
Actionform 顯示模塊數據
ActionMapping 幫助控制器將請求映射到操作
ActionForward 用來指示操作轉移的對象
ActionError 用來存儲和回收錯誤
Struts 標記庫 可以減輕開發顯示層次的工作
.NET 中如何使用 Struts 的設想
1 )模型( Model )
這里寫業務層。
這里寫業務層。
2 )視圖( View )
視圖當然指的是 .apsx 文件。
3 )控制器( Controller )
這里是一個轉向控制器,由 xml 配置完成,就像真正的 struts 一樣。
這里提的是一個簡化的,精煉 struts 思想的 .net 版本使用方法。
例子如下:
一個用戶注冊系統,用戶通過網頁輸入相關信息:注冊 ID 號,密碼, EMAIL ,若注冊成功,則返回成功提示信息,反之出現注冊失敗提示信息。
注冊頁面: reguser.aspx
配置文件: Struts-config.xml :
<Struts-config>
<forward name="failure" path="/ messageFailure.aspx"/>
<forward name="success" path="/ messageSuccess.aspx"/>
<Struts-config>
<forward name="failure" path="/ messageFailure.aspx"/>
<forward name="success" path="/ messageSuccess.aspx"/>
</Struts-config>
核心代碼:
如果,注冊成功,轉向 “success” ,而 “success” 是什么頁面由配置文件決定;這樣就分離了 view (界面層)和 Controller (控制層),有業務層( Model )由控制層來訪問,這樣界面層就可以專心於其美工設計。也許你會說這只不過是個頁面導航。
關於頁面導航,我認為那將是今后的一個發展方向,事實上,這樣做,使系統的脈絡更加清晰。通過一個配置文件,即可把握整個系統各部分之間的聯系,這對於后期的維護有着莫大的好處。尤其是當另一批開發者接手這個項目時,這種優勢體現得更加明顯。