Struts
的體繫結構與工作原理
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 版本使用方法。 例子如下: 一個使用者註冊系統,使用者通過網頁輸入相關資訊:註冊 識別碼,密碼, EMAIL ,若註冊成功,則返回成功提示資訊,反之出現註冊失敗提示資訊。 註冊頁面: reguser.aspx 設定檔: Struts-config.xml :
<Struts-config>
<forward name="failure" path="/ messageFailure.aspx"/>
<forward name="success" path="/ messageSuccess.aspx"/> </Struts-config> 核心代碼: 如果,註冊成功,轉向 “success” ,而 “success” 是什麼頁面由設定檔決定;這樣就分離了 view (介面層)和 Controller (控制層),有業務層( Model )由控制層來訪問,這樣介面層就可以專心於其美工設計。也許你會說這隻不過是個頁面導航。 關於頁面導航,我認為那將是今後的一個發展方向,事實上,這樣做,使系統的脈絡更加清晰。通過一個設定檔,即可把握整個系統各部分之間的聯絡,這對於後期的維護有著莫大的好處。尤其是當另一批開發人員接手這個項目時,這種優勢體現得更加明顯。