




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Struts2本章節(jié)授課目標(biāo)器的概念配置
器使用
器2Struts2框架工作原理圖注意觀察Interceptors3器器?器(Interceptor)是Struts2的一個(gè)重要特性。Struts2框架的大多數(shù)
功能都是通過(guò)
器來(lái)實(shí)現(xiàn)的,像避免表單重復(fù)提交、類型轉(zhuǎn)換、對(duì)象組裝、驗(yàn)證、文件上傳等,都是在器的幫助下實(shí)現(xiàn)的。攔截器之所以稱為“器”,是因?yàn)樗梢栽贏ction執(zhí)行之前或執(zhí)行之后調(diào)用。Struts2將它的功能放到器中實(shí)現(xiàn)而不是分散到Action中實(shí)現(xiàn),有利于系統(tǒng)的解耦,使得功能的實(shí)現(xiàn)類類似于個(gè)人電腦的組裝,變”一個(gè)
器,不需要某個(gè)功能成了可插拔的。需要某個(gè)功能就“就“拔出”。器的作用:① 為action動(dòng)態(tài)添加輸入驗(yàn)證②
對(duì)象組裝(也就是進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換)③
權(quán)限控制④
日志記錄4器器工作過(guò)程5器序號(hào)器名稱作用1alias在請(qǐng)求之間轉(zhuǎn)換名字不同的相似參數(shù)2chain將所有的屬性從前一個(gè)Aciotn復(fù)到當(dāng)前Action中3checkbox添加自動(dòng)的復(fù)選框處理代碼。當(dāng)復(fù)選框未復(fù)選時(shí)采用false值添加到參數(shù)中4基于的名/值設(shè)置Action的屬性5conversionError將類型轉(zhuǎn)換錯(cuò)誤從ActionContext中取出,添加到Action字段錯(cuò)誤中6createSession自動(dòng)創(chuàng)建一個(gè)HttpSession對(duì)象7debugging當(dāng)struts.devMode屬性設(shè)置為true,才有,用于調(diào)試8execAndWait可以用于防止
Action
Http請(qǐng)求超時(shí)9exception提供了異常處理的 功能10fileUpload用于對(duì)文件上傳提供支持11i18n用于支 際化12logger記錄一個(gè)action執(zhí)行的開始和結(jié)束13token檢查傳到Action的token值的有效性,防表單重復(fù)提交6器配置和使用
器前面所介紹的器在struts-default.xml中已經(jīng)進(jìn)行了配置。如果您想要使用上述
器,只需要在應(yīng)用程序struts.xml文件中通過(guò)“<include
file=”struts-default.xml“
/>”將struts-default.xml文件包含進(jìn)來(lái),并繼承其中的struts-default包(package),最后在定義Action時(shí),使用“<interceptor-refname=”xx“
/>”
器或
器棧(interceptorstack)。一旦您繼承了struts-default包(package),所有Action都會(huì)調(diào)用
器棧
——defaultStack。當(dāng)然,在Action配置中加入“<interceptor-ref
name=”xx“
/>”可以覆蓋defaultStack。下面 通過(guò)使用timer 器的使用案例進(jìn)行。7器創(chuàng)建Action類package
com.shinowit;import
com.opensymphony.xwork2.ActionSupport;6L;public
class
TimerInterceptorAction
extends
ActionSupport
{private
static
final
long
serialVersionUID
=
-public
String
execute()
{try{//模擬耗時(shí)的操作Thread.sleep(500);}
catch
(Exception
e)
{e.printStackTrace();}return
SUCCESS;}}8器在Struts2配置xml中定義Action,名為TimerAction,并配置
器<package
name="InterceptorDemo"
extends="struts-default"><action
name="TimerAction"class="com.shinowit.TimerInterceptorAction"><interceptor-ref
name="timer"/><result>/Timer.jsp</result></action></package>器timer缺省沒(méi)有配置在struts-default包中9器timer器執(zhí)行效果1011自定義
器編寫 器類作為“框架(framework)”,可擴(kuò)展性是不可或缺的,因?yàn)槭郎咸峁┤绱素S富的器的能力,恰恰相反,沒(méi)有放之四海而皆準(zhǔn)的東西。雖然,Struts
2為器實(shí)現(xiàn),但是這并不意味
失去創(chuàng)建自定義在Struts
2自定義
器是相當(dāng)容易的一件事。大家在開始著手創(chuàng)建自定義 器前,切記以下原則:器必須是無(wú)狀態(tài)的,不要使用在API提供的ActionInvocation之外的任何東西。原因:Struts
2不能保證為每一個(gè)請(qǐng)求或者action創(chuàng)建一個(gè)實(shí)例,所以如果
器帶有狀態(tài),會(huì)
并發(fā)問(wèn)題。在Struts2中編寫
類,有如下二種方式:實(shí)現(xiàn)Interceptor接口繼承
Interceptor類(一般會(huì)選擇此種方式)12自定義
器器,都需要對(duì)下述三個(gè)方法進(jìn)行編寫 器類無(wú)論選擇哪種方式創(chuàng)建override。三個(gè)方法如下:1. void
init();此方法在
用于初始化器實(shí)例創(chuàng)建之后,intercept()方法被調(diào)用之前調(diào)用,器所需要資源。void
destroy();該方法在
器實(shí)例清除之前調(diào)用,用于
在init()方法中分配的資源。該方法只執(zhí)行一次。String
intercept(ActionInvocation
invocation)
throwsException;該方法在Action執(zhí)行之前被調(diào)用, 器為Action提供的附加功能在該方法中實(shí)現(xiàn)。利用invocation參數(shù),可以獲取action執(zhí)行的狀態(tài)。在intercept()方法中,如果要繼續(xù)執(zhí)行后續(xù)部分,可以調(diào)用invocation.invoke()。13自定義
器器示例代碼自定義package
com.shinowit;import
com.opensymphony.xwork2.ActionInvocation;import
erceptor.
Interceptor;public
class
AroundIntercept
extends Interceptor
{private
static
final
longserialVersionUID
=
1L;@Overridepublic
void
init()
{System.out.println("這是一個(gè)初始化方法");}@Overridepublic
String
intercept(ActionInvocation
invocation)
throws
Exception{String
result
=
"";System.out.println("在action的execute方法執(zhí)行之前動(dòng)作");result=invocation.invoke();System.out.println("在action的execute方法執(zhí)行之后動(dòng)作");return
result;注意:在編寫 器時(shí)要注意, 器必順是無(wú)狀態(tài)的,換句話
說(shuō),在器類中不應(yīng)該有實(shí)例變量。這是因?yàn)閟truts2對(duì)每一個(gè)Action的請(qǐng)求使用的是同一個(gè)
器實(shí)例來(lái)處理,如果
器有狀態(tài),在多線程并 況下,
器的狀態(tài)將不可測(cè)。14自定義
器自定義 器的配置<package
name="InterceptorDemo"
extends="struts-default"><interceptors><interceptor
name="aroundInterceptor"class="com.shinowit.AroundIntercept"></interceptor></interceptors><action
name="TimerAction"class="com.shinowit.TimerInterceptorAction"><interceptor-ref
name="aroundInterceptor"/><interceptor-ref
name="timer"/><result>/Timer.jsp</result></action></package>15自定義
器時(shí)該如何處理?可特殊 器抽象類只需要對(duì)Action中部分方法進(jìn)行以使用下面這個(gè)類:erceptor.MethodFilterInterceptorMethodFilterInterceptor通過(guò)指定include/excluded方法列表來(lái)選擇 或排除的方法,可以設(shè)置的參數(shù)如下:excludeMethods要排除的方法includeMethods要
的方法在設(shè)置 或排除的方法時(shí),如果有多個(gè)方法,那么以逗號(hào)(,)分隔,如果一個(gè)方法的名字同時(shí)出現(xiàn)在excludeMethods和includeMethods參數(shù)中,那么會(huì)當(dāng)作要 的方法。16自定義
器器示例,修改父類為基于MethodFilterInterceptor的MethodFilterInterceptrorpackage
com.shinowit;import
com.opensymphony.xwork2.ActionInvocation;import
erceptor.MethodFilterInterceptor;public
class
AroundIntercept
extendsMethodFilterInterceptor
{ntercept(ActionInvocation
invocation)
throws@OverrideprotectedStringException
{System.out.println("AroundIntercept被調(diào)用......");returninvocation.invoke();}}17自定義
器CrudAction.java代碼package
com.shinowit;import
com.opensymphony.xwork2.ActionSupport;public
class
CrudAction
extends
ActionSupport
{public
String
insert(){System.out.println("insert方法被調(diào)用");return
SUCCESS;}public
String
update(){System.out.println("update方法被調(diào)用");return
SUCCESS;}public
String
delete(){System.out.println("delete方法被調(diào)用");return
SUCCESS;}public
String
select(){System.out.println("select方法被調(diào)用");return
SUCCESS;}public
String
execute(){System.out.println("execute方法被調(diào)用");return
SUCCESS;}}18自定義
器基于MethodFilterInterceptor的
器示例<package
name="InterceptorDemo"
extends="struts-default"><interceptors><interceptor
name="aroundInterceptor"
class="com.shinowit.AroundIntercept"></interceptor></interceptors><action
name="crud_*"
class="com.shinowit.CrudAction"method="{1}"><interceptor-ref
name="aroundInterceptor"><param
name="includeMethods">select,update</param><param
name="excludeMethods">delete,insert</param></interceptor-ref><result>/index.jsp</result></action></package>19自定義
器基于方法過(guò)濾的器執(zhí)行效果2021自定義
器配置
器器需要在struts.xml中進(jìn)行配置才能為action提供服務(wù)。要為action配置
器,首先需要在interceptors元素中使用interceptor元素定義
器,然后
在action中使用interceptor-ref元素指定
的class,前者指定比如對(duì)如前面的器。Interceptor元素有兩個(gè)必需的屬性:name和器的名字,后者指定
器的完整類名。器,需要如下配置:<
package
name=“default"
extends
="struts-default"
><interceptors>
<!
-
-在這里定義
器-
-><interceptor
name=“around”
class=“AroundInterceptor”/></interceptors><
action
name=“test”
class=“ .AroundAction”
><
result
>
/Timer.jsp
</
result
>器--><interceptor-ref
name=“around”/><!–此處</
action
></
package
>22自定義
器配置
器如果在一個(gè)action需要多個(gè) 器,那又需要如何配置?另外,對(duì)于多個(gè) 器之間的執(zhí)行順序又是怎樣的?對(duì)于上述問(wèn)題有二個(gè)解決方法:為一個(gè)Action配置多個(gè)將多個(gè)
器配為一個(gè)器器棧,然后在action中23配置示例為一個(gè)Action配置多個(gè)
器<
package
name
=“default"
extends
="struts-default"
><interceptors>
<!
-
-在這里定義
器-
-><interceptor
name=“before”
class=“BeforeInterceptor”/><interceptor
name=“after”
class=“AfterInterceptor”/></interceptors><
action
name=“test”
class=“
.TestAction”
><
result
>
/Timer.jsp
</
result
>器-->器--><interceptor-ref
name=“before”/><!–此處<interceptor-ref
name=“after”/><!–此處</
action
></
package
>24配置示例定義 器棧示例<
package
name
=“default"
extends
="struts-default"
><interceptors>
<!
-
-在這里定義
器-
-><interceptor
name=“before”
class=“BeforeInterceptor”/><interceptor
name=“after”
class=“AfterInterceptor”/>器棧--><!—配置
器棧,便于使用→<interceptor-stack
name=“mystack”><
interceptor-ref
name
=“before”
/><
interceptor-ref
name
=“after”
/></interceptor-stack></interceptors><
action
name=“test”
class=“
.TestAction”
><result
>
/Timer.jsp
</
result
><interceptor-ref
name=“mystack”/><!–此處</
action></
package
>25配置示例缺省 器棧的配置<
package
name
=“default"
extends
="struts-default"
><interceptors>
<!
-
-在這里定義
器-
-><interceptor
name=“before”
class=“BeforeInterceptor”/><interceptor
name=“after”
class=“AfterInterceptor”/><!—配置
器棧,便于使用→<interceptor-stack
name=“mystack”><
interceptor-ref
name
=“before”/><
interceptor-ref
name
=“after”
/></interceptor-stack></interceptors><!—此處指定了一個(gè)默認(rèn)的 器棧,也就意味著此名下所有的action都將會(huì)執(zhí)行此默認(rèn) 器棧中的 器(按出現(xiàn)順序)→<default-interceptor-ref
name=“mystack”/>.TestAction”
><
action
name=“test”
class=“<result
>
/Timer.jsp
</
result
></
action
></
package
>26配置示例當(dāng)配置缺省 器棧之后又在action中定義 器時(shí)<
package
name
=“default"
extends
="struts-default"
><interceptors>
<!
-
-在這里定義
器-
-><interceptor
name=“before”
class=“BeforeInterceptor”/><interceptor
name=“after”
class=“AfterInterceptor”/><!—配置
器棧,便于使用→<interceptor-stack
name=“mystack”><
interceptor-ref
name
=“before”
/><interceptor-ref
name
=“after”
/></interceptor-stack></interceptors><default-interceptor-ref
name=“mystack”/><
act
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廈門大學(xué)《建筑功能材料A》2023-2024學(xué)年第二學(xué)期期末試卷
- 五邑大學(xué)《生物檢測(cè)技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 重慶對(duì)外經(jīng)貿(mào)學(xué)院《消費(fèi)者行為學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 環(huán)保項(xiàng)目環(huán)境影響識(shí)別與評(píng)價(jià)考核試卷
- 碳素材料在核燃料處理中的應(yīng)用考核試卷
- 燈具配件物流與倉(cāng)儲(chǔ)管理考核試卷
- 石油開采業(yè)的行業(yè)協(xié)會(huì)與組織合作考核試卷
- 玉米加工技術(shù)創(chuàng)新與知識(shí)產(chǎn)權(quán)保護(hù)考核試卷
- 智能驅(qū)蚊手環(huán)驅(qū)蚊效果考核試卷
- 林業(yè)副產(chǎn)品在化學(xué)品制造中的應(yīng)用考核試卷
- 2025年鄭州鐵路職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)及參考答案1套
- 樹木移植的施工方案
- 四川大學(xué)自主招生個(gè)人陳述語(yǔ)言風(fēng)格范文
- 5.2《稻》教案-【中職專用】高二語(yǔ)文同步教學(xué)(高教版2023·拓展模塊下冊(cè))
- 人工智能在智能安防中的應(yīng)用
- ORP-數(shù)值對(duì)反滲透裝置的影響
- 小王子英文介紹課件
- 法律服務(wù)行業(yè)智能合同審查方案
- 2025南水北調(diào)東線山東干線限責(zé)任公司人才招聘30人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 公共管理學(xué)筆記
- 地鐵隧道應(yīng)力釋放孔設(shè)計(jì)方案
評(píng)論
0/150
提交評(píng)論