Struts框架詳解
struts-config.xml Struts配置文件
ActionServlet 控制器
Action Class 包含事務(wù)邏輯
ActionForm 顯示模塊數(shù)據(jù)
ActionMapping 幫助控制器將請(qǐng)求映射到操作
ActionForward 用來指示操作轉(zhuǎn)移的對(duì)象
ActionError 用來存儲(chǔ)和回收錯(cuò)誤
Struts標(biāo)記庫 可以減輕開發(fā)顯示層次的工作
struts框架的優(yōu)勢
1.良好的架構(gòu)和設(shè)計(jì)
2.可重用,模塊化,擴(kuò)展性好
3.Open source
struts-config.xml
Struts-config.xml集中了所有頁面的導(dǎo)航定義。對(duì)于大型的WEB項(xiàng)目,通過此配置文件即可迅速把握其脈絡(luò),這不管是對(duì)于前期的開發(fā),還是后期的維護(hù)或升級(jí)都是大有裨益的。掌握Struts-config.xml是掌握Struts的關(guān)鍵所在。
FormBean部分
<struts-config>
<!-- Form Bean Definitions -->
<form-beans>
<form-bean name=“testform" type="com.cjea.test.TestForm" />
</form-beans>
全局轉(zhuǎn)發(fā)部分
<!-- Global Forward Definitions -->
<global-forwards>
<forward name="failure" path="bad.jsp"/>
<forward name="success" path="/good.jsp" />
</global-forwards>
action部分
<action-mappings>
<action path=“/test/test.jsp" type=“com.cjea.test.testAction" name="testform" scope="request">
<forward name="success" path="/test/good.jsp" />
</action>
<action-mappings>
</struts-config>
ActionServlet
ActionServlet 是struts框架 MVC 實(shí)現(xiàn)的 controller 部分,它是這一框架的核心。
ActionServlet 創(chuàng)建并使用 Action、ActionForm 和 ActionForward。
ActionServlet的基本功能
截獲用戶的Http請(qǐng)求
把這個(gè)請(qǐng)求映射到相應(yīng)的Action類。
創(chuàng)建一個(gè)ActionForm bean實(shí)例,將form請(qǐng)求放入formbean的實(shí)例中
調(diào)用Action實(shí)例的perform()方法
將ActioForm bean,Action Mapping對(duì)象,request和response對(duì)象傳給Action的perform()方法
perform返回一個(gè)ActionForword對(duì)象,根據(jù)方法執(zhí)行情況轉(zhuǎn)到相應(yīng)的jsp頁面.
Action Classes
Action 類是業(yè)務(wù)邏輯的一個(gè)包裝。Action 類的用途是將 HttpServletRequest 轉(zhuǎn)換為業(yè)務(wù)邏輯。
ActionForm
ActionForm 維護(hù) Web 應(yīng)用程序的會(huì)話狀態(tài)。
ActionForm 是一個(gè)抽象類,必須為每個(gè)輸入表單模型創(chuàng)建該類的子類。
ActionForm的使用
假定有一個(gè)由 HTML 表單設(shè)置的 TestActionForm。Struts 框架將執(zhí)行以下操作:
檢查 TestActionForm是否存在;如果不存在,它將創(chuàng)建該類的一個(gè)實(shí)例。
Struts 將使用 HttpServletRequest 中相應(yīng)的域設(shè)置 TestActionForm的狀態(tài)。
Struts 框架在將 TestActionForm傳遞給TestAction 之前將更新它的狀態(tài)。
struts-config.xml 文件控制 HTML 表單請(qǐng)求與 ActionForm 之間的映射關(guān)系。
可將多個(gè)請(qǐng)求映射到 TestActionForm 。
Struts標(biāo)記庫
Struts框架包括自定義標(biāo)簽庫,它可以用 在很多方面。盡管這些庫并不要求用框 架,但使用它們會(huì)有助于程序的開發(fā)。
Struts標(biāo)記庫
struts-bean taglib:包含在訪問bean和bean屬性時(shí)使用的tag,也包含一些消息顯示的tag。
struts-html taglib:包含用來生成動(dòng)態(tài)HTML用戶界面和窗體的tag。
struts-logic taglib :包含的tag用來管理根據(jù)條件生成輸出文本,和其它一些用來控制的信息。
struts-template taglib包含的tag用來定義模板機(jī)制。
Bean Taglib
用于定義新bean、訪問bean及其屬性的標(biāo)記
在struts-bean.tld中定義了它的標(biāo)記庫描述器
Bean Taglib主要功能
創(chuàng)建和復(fù)制bean的標(biāo)記
腳本變量定義標(biāo)記
bean翻譯標(biāo)記
消息國際化標(biāo)記
Bean復(fù)制標(biāo)記 (<bean:define>)
可定義新bean,可復(fù)制現(xiàn)有bean,還可從現(xiàn)有bean復(fù)制屬性。
定義新字符串常數(shù)
將現(xiàn)有的bean復(fù)制到新定義的bean對(duì)象
復(fù)制現(xiàn)有bean的屬性來創(chuàng)建新的bean
<bean:define>標(biāo)記屬性:
Id 新定義的bean腳本變量名稱,必須設(shè)置
Type 定義引入腳本變量的類
Value 為id屬性定義的腳本變量分配一個(gè)新的對(duì)象
<bean:define>標(biāo)記屬性:
Name 目標(biāo)bean的名稱。若value屬性沒有設(shè)置,這個(gè)屬性就必須設(shè)置
property Name屬性定義的bean的屬性名稱,用來定義新的bean
Scope 源bean的作用域。若沒有設(shè)置,搜索范圍是從頁作用域到應(yīng)用程序作用域
toScope 目標(biāo)bean的作用域。若沒有設(shè)置,默認(rèn)值是頁作用域
舉例
定義一個(gè)bean:
<bean:define id="test" value="this is a test"/>
源bean在頁作用域中被拷貝到請(qǐng)求作用域中的另一個(gè)bean:
<bean:define id="targetBean" name="sourceBean"
scope="page" toScope="request"/>
腳本變量的標(biāo)記
從多種資源中定義和生成腳本變量,這些資源包括cookie,請(qǐng)求參數(shù),HTTP標(biāo)頭等等。
腳本變量的標(biāo)記屬性:
Id 腳本變量和要定義的頁作用域 屬性的名稱
Name cookie/標(biāo)頭/參數(shù)的名稱
Value 如果沒有匹配的cookie或 數(shù)值,就返回這個(gè)屬性指 定的默認(rèn)值
腳本變量的標(biāo)記屬性:
multiple 如果這個(gè)屬性設(shè)置了任意一個(gè)數(shù)值,所有匹配的cookie都會(huì)被積累并存儲(chǔ)到一個(gè)Cookie[](一個(gè)數(shù)組)類型的bean里 若無設(shè)置,指定cookie的第一個(gè)值將作為Cookie類型的值
舉例
<bean:cookie id="myCookie" name="userName"/>
腳本變量名稱是myCookie,用來創(chuàng)建這個(gè)屬性的cookie的名稱是userName。
<bean:header id="myHeader" name="Accept-Language"/>
腳本變量名稱是myHeader,請(qǐng)求標(biāo)頭的名稱是Accept-Language.
舉例
<bean:parameter id="myParameter" name="myParameter">
腳本變量名稱是myPatameter,它保存的請(qǐng)求參數(shù)的名稱也是myParameter
邏輯標(biāo)記
Struts邏輯標(biāo)簽庫包含的標(biāo)記能夠有條件地產(chǎn)生輸出文本
在對(duì)象集合中循環(huán)從而重復(fù)地產(chǎn)生輸出文本,以及應(yīng)用程序流程控制
它也提供了一組在JSP頁中處理流程控制的標(biāo)記
邏輯標(biāo)記封裝在文件名為struts-logic.tld的標(biāo)記包中
邏輯標(biāo)記庫的功能
條件邏輯
重復(fù)
轉(zhuǎn)發(fā)/重定向響應(yīng)
條件邏輯標(biāo)記
第一類可以比較下列實(shí)體與一個(gè)常數(shù)的大小
第二類在計(jì)算標(biāo)記體之前判斷特定的項(xiàng)目是否存在
第三類根據(jù)模板匹配的結(jié)果檢查標(biāo)記體的內(nèi)容
第一類條件邏輯標(biāo)記
<equal> 如果常數(shù)與被定義的實(shí)體相等,返回true
<notEqual> 如果常數(shù)與被定義的實(shí)體不相等,返回true
<greaterEqual> 如果常數(shù)大于等于被定義的實(shí)體,返回true
第一類條件邏輯標(biāo)記
<lessEqual> 如果常數(shù)小于等于被定義的實(shí)體,返回true
<lessThan> 如果常數(shù)小于被定義的實(shí)體,返回true
<greaterThan> 如果常數(shù)大于被定義的實(shí)體,返回true
舉例
判斷名為"name"的請(qǐng)求參數(shù)的值是否是"SomeName"。
<logic:equal parameter="name" value="SomeName">
The entered name is SomeName
</logic:equal>
舉例
判斷在頁的作用域中是否有一個(gè)名為"bean"的bean,它有一個(gè)prop屬性,這個(gè)屬性的值是否大于7。
如果這個(gè)屬性能夠轉(zhuǎn)化為數(shù)值,就進(jìn)行數(shù)值比較,否則就進(jìn)行字符串比較。
<logic:greaterThan name="bean" property="prop" scope="page" value="7">
The value of bean.Prop is greater than 7
</logic:greaterThan>
第二類條件邏輯標(biāo)記
<logic:present>
<logic:notPresent>
第三類條件邏輯標(biāo)記
<logic:match>
<logic:notMatch>
重復(fù)標(biāo)記<logic:iterate>
它能夠根據(jù)特定集合中元素的數(shù)目對(duì)標(biāo)記體的內(nèi)容進(jìn)行重復(fù)的檢查
集合的類型
java.util.Iterator
java.util.Collection
java.util.Map
java.util.List
數(shù)組
舉例
Strlst是一個(gè)包含字符串的List,現(xiàn)在要將他內(nèi)部的字符串全都顯示在瀏覽器里
<logic:iterate id="element" name="strlst" indexId="index">
<%=(String)element)%>
</logic:iterate>
轉(zhuǎn)發(fā)標(biāo)記
<logic:forward>標(biāo)記能夠?qū)㈨憫?yīng)轉(zhuǎn)發(fā)給重定向到特定的全局ActionForward上
ActionForward的類型決定了是使用PageContext轉(zhuǎn)發(fā)響應(yīng),還是使用sendRedirect將響應(yīng)進(jìn)行重定向
此標(biāo)記只有一個(gè)"name"屬性,用來指定全局ActionForward的名稱,例如:
<logic:forward name="myGlobalForward"/>
重定向標(biāo)記
<logic:redirect>標(biāo)記是一個(gè)能夠執(zhí)行HTTP重定向的強(qiáng)大工具。
根據(jù)指定的不同屬性,它能夠通過不同的方式實(shí)現(xiàn)重定向。
它還允許開發(fā)人員指定重定向URL的查詢參數(shù)。
HTML標(biāo)記
Struts HTML標(biāo)記可以大致地分為以下幾個(gè)功能:
顯示表單元素和輸入控件
顯示錯(cuò)誤信息
顯示其他HTML元素
模板標(biāo)記
Struts模板標(biāo)記可以大致地分為以下幾個(gè)功能:
插入標(biāo)記<template:insert>
放置標(biāo)記<template:put>
獲得標(biāo)記<template:get>