熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

淺析Struts 體系結構與工作原理(圖)

2013-11-23 20:27:54  來源: Java開源技術 

  基本概念
  
  Struts是Apache 基金會Jakarta 項目組的一個Open Source 項目它采用MVC模式能夠很好地幫助java 開發者利用JEE開發Web應用和其他的java架構一樣Struts 也是面向對象設計將MVC模式分離顯示邏輯和業務邏輯的能力發揮得淋漓盡致Structs 框架的核心是一個彈性的控制層基於如 Java ServletsJavaBeansResourceBundles與XML等標准技術以及 Jakarta Commons 的一些類庫Struts有一組相互協作的類(組件)Serlvet以及jsp tag lib組成基於struts構架的web應用程序基本上符合JSP Model的設計標准可以說是一個傳統 MVC設計模式的一種變化類型
  
  Struts有其自己的控制器(Controller)同時整合了其他的一些技術去實現模型層(Model)和視圖層(View)在模型層Struts可以很容易的與數據訪問技術相結合如 JDBC / EJB 以及其它第三方類庫如 Hibernate / iBATIS 或者 Object Relational Bridge(對象關系橋)在視圖層Struts能夠與JSP包括 JSTL 與 JSF以及 Velocity 模板XSLT 與其它表示層技術
  
  Struts 為每個專業的 Web 應用程序做背後的支撐幫助為你的應用創建一個擴展的開發環境
  
  Struts的體系結構與工作原理
  
  MVC即ModelViewController的縮寫是一種常用的設計模式MVC 減弱了業務邏輯接口和數據接口之間的耦合以及讓視圖層更富於變化MVC的工作原理如下圖所示
  
 

  

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

  

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

  

  
  上圖顯示了 ActionServlet (Controller)Actionform (form State) 和 Action (Model Wrapper) 之間的最簡關系
  體系結構中所使用的組件如下表
  ActionServlet  控制器
  ActionClass   包含事務邏輯
  Actionform   顯示模塊數據
  ActionMapping  幫助控制器將請求映射到操作
  ActionForward  用來指示操作轉移的對象
  ActionError   用來存儲和回收錯誤
  Struts標記庫  可以減輕開發顯示層次的工作
  
  Struts配置文件strutsconfigxml
  
  Struts配置文件strutsconfigxml我們默認可以在目錄WEBINFstrutsconfigxml找到這個文件文件的配置包括全局轉發ActionMapping類Actionform bean 和JDBC數據源四個部分
  
  )配置全局轉發
  
  全局轉發用來在JSP頁之間創建邏輯名稱映射轉發都可以通過對調用操作映射的實例來獲得例如NuW=mactionMappingInstacefindForward(logicalName);
  
  全局轉發的例子
  <globalforwards>
  <forward name=bookCreated path=/BookViewjsp/>
  </globalforwards>
  
  屬性   描述
  Name   全局轉發的名字
  Path   與目標URL的相對路徑
  
  )配置ActionMapping
  ActionMapping對象幫助進行框架內部的流程控制它們可將請求URI映射到Action類並且將Action類與Actionform bean相關聯ActionServlet在內部使用這些映射並將控制轉移到特定Action類的實例所有Action類使用perform()方法實現特定應用程序代碼返回一個ActionForward對象其中包括響應轉發的目標資源名稱例如
  
  <actionmappings>
  <action path=/createBook type=BookAction name=bookform scope=request input=/CreateBookjsp
  </action>
  <forward name=failure path=/CreateBookjsp/>
  <forward name=cancel path=/indexjsp/>
  </actionmappings>
  
  屬性           描述
  Path        Action類的相對路徑
  Name        與本操作關聯的Action bean的名稱
  Type        連接到本映射的Action類的全稱(可有包名)
  Scope        Actionform bean的作用域(請求或會話)
  Prefix       用來匹配請求參數與bean屬性的前綴
  Suffix       用來匹配請求參數與bean屬性的後綴
  attribute      作用域名稱
  className      ActionMapping對象的類的完全限定名默認的是
  orgapachestrutsactionActionMapping
  input        輸入表單的路徑指向bean發生輸入錯誤必須返回的控制
  unknown       設為true操作將被作為所有沒有定義的ActionMapping的URI的默認操作
  validate      設置為true則在調用Action對象上的perform()方法前 ActionServlet將調用Actionform bean的validate()方法來進行輸入檢查
  通過<forward>元素可以定義資源的邏輯名稱該資源是Action類的響應要轉發的目標
  屬性               描述
  Id ID
  ClassName           ActionForward類的完全限定名默認是
  orgapachestrutsactionActionForward
  Name             操作類訪問ActionForward時所用的邏輯名
  Path             響應轉發的目標資源的路徑
  redirect           若設置為true則ActionServlet使用sendRedirec方法來轉發資源
  )配置Actionform Bean
  ActionServlet使用Actionform來保存請求的參數這些bean的屬性名稱與HTTP請求參數中的名稱相對應控制器將請求參數傳遞到Actionform bean的實例然後將這個實例傳送到Action類例子
  <formbeans>
  <formbean name=bookform type=Bookform/>
  </formbeans>
  屬性               描述
  Id ID
  className       Actionform bean的完全限定名默認值是orgapachestrutsactionActionformBean
  Name               表單bean在相關作用域的名稱這個屬性用來將bean與ActionMapping進行關聯
  Type          類的完全限定名
  )配置JDBC數據源
  用<datasources>元素可以定義多個數據源
  屬性        描述
  Id         ID
  Key         Action類使用這個名稱來尋找連接
  Type        實現JDBC接口的類的名稱
  
  下面屬性需要<setproperty>元素定義在Struts 版本中已不在使用但你可用<datasource>元素例如|
  <datasources>
  <datasource id=DS key=conPool type=orgapachestrutsutilGenericDataSource
  <setproperty id=SP autoCommit=true description=Example Data Source Configuration
  driverClass=orgtestmmmysqlDriver maxCount=
  minCount= url=jdbc:mysql://localhost/test user=struts password=ghq />
  <datasource/>
  </datasources>
  
  屬性     描述
  desciption 數據源的描述
  autoCommit 數據源創建的連接所使用的默認自動更新數據庫模式
  driverClass 數據源所使用的類
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28531.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.