基本概念 Struts是Apache 基金會Jakarta 項目組的一個Open Source 項目
它采用MVC模式
能夠很好地幫助java 開發者利用J
EE開發Web應用
和其他的java架構一樣
Struts 也是面向對象設計
將MVC模式
分離顯示邏輯和業務邏輯
的能力發揮得淋漓盡致
Structs 框架的核心是一個彈性的控制層
基於如 Java Servlets
JavaBeans
ResourceBundles與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即Model
View
Controller的縮寫
是一種常用的設計模式
MVC 減弱了業務邏輯接口和數據接口之間的耦合
以及讓視圖層更富於變化
MVC的工作原理
如下圖
所示
圖 Struts 是MVC的一種實現
它將 Servlet和 JSP 標記(屬於 J
EE 規范)用作實現的一部分
Struts繼承了MVC的各項特性
並根據J
EE的特點
做了相應的變化與擴展
Struts的體系結構與工作原理如下圖
所示
圖 從圖
中我們可以知道
Struts的體系結構包括模型(Model)
視圖(View)和控制器(Controller)三部分
下面讓我們從MVC角度來看看struts的體系結構(Model
)與工作原理
)模型(Model)
在Struts的體系結構中
模型分為兩個部分
系統的內部狀態和可以改變狀態的操作(事務邏輯)
內部狀態通常由一組Actinform Bean表示
根據設計或應用程序復雜度的不同
這些Bean可以是自包含的並具有持續的狀態
或只在需要時才獲得數據(從某個數據庫)
大型應用程序通常在方法內部封裝事務邏輯(操作)
這些方法可以被擁有狀態信息的bean調用
比如購物車bean
它擁有用戶購買商品的信息
可能還有checkOut()方法用來檢查用戶的信用卡
並向倉庫發定貨信息
小型程序中
操作可能會被內嵌在Action類
它是struts框架中控制器角色的一部分
當邏輯簡單時這個方法很適合
建議用戶將事務邏輯(要做什麼)與Action類所扮演的角色(決定做什麼)分開
)視圖(View)
視圖主要由JSP建立
struts包含擴展自定義標簽庫(TagLib)
可以簡化創建完全國際化用戶界面的過程
目前的標簽庫包括
Bean Tags
HTML tags
Logic Tags
Nested Tags 以及Template Tags等
)控制器(Controller)
在struts中
基本的控制器組件是ActionServlet類中的實例servelt
實際使用的servlet在配置文件中由一組映射(由ActionMapping類進行描述)進行定義
對於業務邏輯的操作則主要由Action
ActionMapping
ActionForward這幾個組件協調完成的
其中Action扮演了真正的業務邏輯的實現者
ActionMapping與ActionForward則指定了不同業務邏輯或流程的運行方向
struts
config
xml 文件配置控制器
Struts體系結構中的組件
圖 上圖
顯示了 ActionServlet (Controller)
Actionform (form State) 和 Action (Model Wrapper) 之間的最簡關系
體系結構中所使用的組件如下表
ActionServlet 控制器
ActionClass 包含事務邏輯
Actionform 顯示模塊數據
ActionMapping 幫助控制器將請求映射到操作
ActionForward 用來指示操作轉移的對象
ActionError 用來存儲和回收錯誤
Struts標記庫 可以減輕開發顯示層次的工作
Struts配置文件strutsconfigxml Struts配置文件struts
config
xml
我們默認可以在目錄WEB
INFstruts
config
xml找到這個文件
文件的配置包括全局轉發
ActionMapping類
Actionform bean 和JDBC數據源四個部分
)配置全局轉發
全局轉發用來在JSP頁之間創建邏輯名稱映射
轉發都可以通過對調用操作映射的實例來獲得
例如
NuW=mactionMappingInstace
findForward(
logicalName
);
全局轉發的例子
<global
forwards>
<forward name=
bookCreated
path=
/BookView
jsp
/>
</global
forwards>
屬性 描述
Name 全局轉發的名字
Path 與目標URL的相對路徑
)配置ActionMapping
ActionMapping對象幫助進行框架內部的流程控制
它們可將請求URI映射到Action類
並且將Action類與Actionform bean相關聯
ActionServlet在內部使用這些映射
並將控制轉移到特定Action類的實例
所有Action類使用perform()方法實現特定應用程序代碼
返回一個ActionForward對象
其中包括響應轉發的目標資源名稱
例如
<action
mappings>
<action path=
/createBook
type=
BookAction
name=
bookform
scope=
request
input=
/CreateBook
jsp
>
</action>
<forward name=
failure
path=
/CreateBook
jsp
/>
<forward name=
cancel
path=
/index
jsp
/>
</action
mappings>
屬性 描述
Path Action類的相對路徑
Name 與本操作關聯的Action bean的名稱
Type 連接到本映射的Action類的全稱(可有包名)
Scope Actionform bean的作用域(請求或會話)
Prefix 用來匹配請求參數與bean屬性的前綴
Suffix 用來匹配請求參數與bean屬性的後綴
attribute 作用域名稱
className ActionMapping對象的類的完全限定名默認的是
org
apache
struts
action
ActionMapping
input 輸入表單的路徑
指向bean發生輸入錯誤必須返回的控制
unknown 設為true
操作將被作為所有沒有定義的ActionMapping的URI的默認操作
validate 設置為true
則在調用Action對象上的perform()方法前
ActionServlet將調用Actionform bean的validate()方法來進行輸入檢查
通過<forward>元素
可以定義資源的邏輯名稱
該資源是Action類的響應要轉發的目標
屬性 描述
Id ID
ClassName ActionForward類的完全限定名
默認是
org
apache
struts
action
ActionForward
Name 操作類訪問ActionForward時所用的邏輯名
Path 響應轉發的目標資源的路徑
redirect 若設置為true
則ActionServlet使用sendRedirec方法來轉發資源
)配置Actionform Bean
ActionServlet使用Actionform來保存請求的參數
這些bean的屬性名稱與HTTP請求參數中的名稱相對應
控制器將請求參數傳遞到Actionform bean的實例
然後將這個實例傳送到Action類
例子
<form
beans>
<form
bean name=
bookform
type=
Bookform
/>
</form
beans>
屬性 描述
Id ID
className Actionform bean的完全限定名
默認值是org
apache
struts
action
ActionformBean
Name 表單bean在相關作用域的名稱
這個屬性用來將bean與ActionMapping進行關聯
Type 類的完全限定名
)配置JDBC數據源
用<data
sources>元素可以定義多個數據源
屬性 描述
Id ID
Key Action類使用這個名稱來尋找連接
Type 實現JDBC接口的類的名稱
下面屬性需要<set
property>元素定義
在Struts
版本中已不在使用
但你可用<data
source>元素
例如
|
<data
sources>
<data
source id=
DS
key=
conPool
type=
org
apache
struts
util
GenericDataSource
<set
property id=
SP
autoCommit=
true
description=
Example Data Source Configuration
driverClass=
org
test
mm
mysql
Driver
maxCount=
minCount=
url=
jdbc:mysql://localhost/test
user=
struts
password=
ghq
/>
<data
source/>
</data
sources>
屬性 描述
desciption 數據源的描述
autoCommit 數據源創建的連接所使用的默認自動更新數據庫模式
driverClass 數據源所使用的類
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28531.html