![Struts2—攔截器和轉(zhuǎn)換器詳解_第1頁(yè)](http://file3.renrendoc.com/fileroot3/2021-12/1/f2676d02-f6c8-4b70-b97c-1d8c72bfab70/f2676d02-f6c8-4b70-b97c-1d8c72bfab701.gif)
![Struts2—攔截器和轉(zhuǎn)換器詳解_第2頁(yè)](http://file3.renrendoc.com/fileroot3/2021-12/1/f2676d02-f6c8-4b70-b97c-1d8c72bfab70/f2676d02-f6c8-4b70-b97c-1d8c72bfab702.gif)
![Struts2—攔截器和轉(zhuǎn)換器詳解_第3頁(yè)](http://file3.renrendoc.com/fileroot3/2021-12/1/f2676d02-f6c8-4b70-b97c-1d8c72bfab70/f2676d02-f6c8-4b70-b97c-1d8c72bfab703.gif)
![Struts2—攔截器和轉(zhuǎn)換器詳解_第4頁(yè)](http://file3.renrendoc.com/fileroot3/2021-12/1/f2676d02-f6c8-4b70-b97c-1d8c72bfab70/f2676d02-f6c8-4b70-b97c-1d8c72bfab704.gif)
![Struts2—攔截器和轉(zhuǎn)換器詳解_第5頁(yè)](http://file3.renrendoc.com/fileroot3/2021-12/1/f2676d02-f6c8-4b70-b97c-1d8c72bfab70/f2676d02-f6c8-4b70-b97c-1d8c72bfab705.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Struts2Struts2攔截器和轉(zhuǎn)換器回顧qStruts2標(biāo)簽簡(jiǎn)介q非UI標(biāo)簽q 控制標(biāo)簽q 數(shù)據(jù)標(biāo)簽qUI標(biāo)簽q 表單標(biāo)簽q 非表單標(biāo)簽q主題和模板目標(biāo)qStruts2攔截器q 攔截器簡(jiǎn)介q 自定義攔截器q 攔截器配置初步q Struts2內(nèi)置攔截器q 攔截器實(shí)例qStruts2轉(zhuǎn)換器q 內(nèi)置轉(zhuǎn)化器q 自定義轉(zhuǎn)換器攔截器簡(jiǎn)介攔截器攔截器,在AOP(Aspect-Oriented Programming)中用于在某個(gè)方法或字段被訪問(wèn)之前,進(jìn)行攔截然后在之前或之后加入某些操作。攔截是AOP的一種實(shí)現(xiàn)策略。Struts2的攔截器類似過(guò)濾器,它也默認(rèn)有init();destroy(); 也有攔截
2、器鏈,也需要配置。實(shí)際上在Struts2框架中有很多攔截器的實(shí)現(xiàn),如國(guó)際化、轉(zhuǎn)換器,校驗(yàn)等。攔截器的工作原理工作原理如上圖,每一個(gè)Action請(qǐng)求都包裝在一系列的攔截器的內(nèi)部。攔截器可以在Action執(zhí)行之前做相似的操作也可以在Action執(zhí)行之后做回收操作。 每一個(gè)Action既可以將操作轉(zhuǎn)交給下面的攔截器,Action也可以直接退出操作返回客戶既定的畫面。自定義攔截器自定義一個(gè)攔截器需要三步:1 自定義一個(gè)實(shí)現(xiàn)Interceptor接口(或者繼承自AbstractInterceptor)的類。2 在strutx.xml中注冊(cè)上一步中定義的攔截器。3 在需要使用的Action中引用上述定義的
3、攔截器,為了方便也可將攔截器定義為默認(rèn)的攔截器,這樣在不加特殊聲明的情況下所有的Action都被這個(gè)攔截器攔截。自定義攔截器Interceptor接口聲明了三個(gè)方法:public interface Interceptor extends Serializable void destroy(); void init(); String intercept(ActionInvocation invocation) throws Exception; Init方法在攔截器類被創(chuàng)建之后,在對(duì)Action鏡像攔截之前調(diào)用,相當(dāng)于一個(gè)post-constructor方法,使用這個(gè)方法可以給攔截器類做必要
4、的初始話操作。Destroy方法在攔截器被垃圾回收之前調(diào)用,用來(lái)回收init方法初始化的資源。Intercept是攔截器的主要攔截方法,如果需要調(diào)用后續(xù)的Action或者攔截器,只需要在該方法中調(diào)用invocation.invoke()方法即可,在該方法調(diào)用的前后可以插入Action調(diào)用前后攔截器需要做的方法。如果不需要調(diào)用后續(xù)的方法,則返回一個(gè)String類型的對(duì)象即可,例如Action.SUCCESS。另外AbstractInterceptor提供了一個(gè)簡(jiǎn)單的Interceptor的實(shí)現(xiàn),這個(gè)實(shí)現(xiàn)為:public abstract class AbstractInterceptor imp
5、lements Interceptor public void init() public void destroy() public abstract String intercept(ActionInvocation invocation) throws Exception;在不需要編寫init和destroy方法的時(shí)候,只需要從AbstractInterceptor繼承而來(lái),實(shí)現(xiàn)intercept方法即可。自定義攔截器我們嘗試編寫一個(gè)Session過(guò)濾用的攔截器,該攔截器查看用戶Session中是否存在特定的屬性(LOGIN屬性)如果不存在,中止后續(xù)操作定位到LOGIN,否則執(zhí)行原定操作
6、,代碼為:public class CheckLoginInterceptor extends AbstractInterceptor public static final String LOGIN_KEY = LOGIN; public static final String LOGIN_PAGE = global.login; public String intercept(ActionInvocation actionInvocation) throws Exception System.out.println(begin check login interceptor!); / 對(duì)L
7、oginAction不做該項(xiàng)攔截 Object action = actionInvocation.getAction(); if (action instanceof LoginAction) System.out.println(exit check login, because this is login action.); return actionInvocation.invoke(); / 確認(rèn)Session中是否存在LOGIN Map session = actionInvocation.getInvocationContext().getSession(); String lo
8、gin = (String) session.get(LOGIN_KEY); if (login != null & login.length() 0) / 存在的情況下進(jìn)行后續(xù)操作。 System.out.println(already login!); return actionInvocation.invoke(); else / 否則終止后續(xù)操作,返回LOGIN System.out.println(no login, forward login page!); return LOGIN_PAGE; 自定義攔截器注冊(cè)攔截器注冊(cè)攔截器 將上述攔截器設(shè)定為默認(rèn)攔截器:這樣在后續(xù)同一個(gè)pac
9、kage內(nèi)部的所有Action執(zhí)行之前都會(huì)被login攔截。注冊(cè)并引用注冊(cè)并引用Interceptor login.jsp /secure/home 自定義攔截器可以將多個(gè)攔截器合并在一起作為一個(gè)堆棧調(diào)用,當(dāng)一個(gè)攔截器堆棧被附加到一個(gè)可以將多個(gè)攔截器合并在一起作為一個(gè)堆棧調(diào)用,當(dāng)一個(gè)攔截器堆棧被附加到一個(gè)Action的時(shí)候,的時(shí)候,要想要想Action執(zhí)行,必須執(zhí)行攔截器堆棧中的每一個(gè)攔截器。執(zhí)行,必須執(zhí)行攔截器堆棧中的每一個(gè)攔截器。login.jsp/secure/home內(nèi)置攔截器注冊(cè)攔截器注冊(cè)攔截器 將上述攔截器設(shè)定為默認(rèn)攔截器:這樣在后續(xù)同一個(gè)package內(nèi)部的所有Action執(zhí)行之
10、前都會(huì)被login攔截。內(nèi)置攔截器上述說(shuō)明的攔截器在默認(rèn)的上述說(shuō)明的攔截器在默認(rèn)的Struts2應(yīng)用中,根據(jù)慣例配置了若干個(gè)攔截器堆棧,詳細(xì)情參看應(yīng)用中,根據(jù)慣例配置了若干個(gè)攔截器堆棧,詳細(xì)情參看struts-default.xml其中有一個(gè)攔截器堆棧比較特殊,他會(huì)應(yīng)用在默認(rèn)的每一個(gè)其中有一個(gè)攔截器堆棧比較特殊,他會(huì)應(yīng)用在默認(rèn)的每一個(gè)Action上。上。dojo.*input,back,cancel,browseinput,back,cancel,browse內(nèi)置攔截器需要說(shuō)明的幾點(diǎn):需要說(shuō)明的幾點(diǎn):1攔截器執(zhí)行的順序按照定義的順序執(zhí)行,例如:攔截器執(zhí)行的順序按照定義的順序執(zhí)行,例如:的執(zhí)行順
11、序?yàn)椋旱膱?zhí)行順序?yàn)椋簍hisWillRunFirstInterceptorthisWillRunNextInterceptorfollowedByThisInterceptorthisWillRunLastInterceptorMyAction1MyAction2(chain)MyPreResultListenerMyResult(result)thisWillRunLastInterceptorfollowedByThisInterceptorthisWillRunNextInterceptorthisWillRunFirstInterceptor內(nèi)置攔截器2使用默認(rèn)攔截器配置每個(gè)使用默認(rèn)攔
12、截器配置每個(gè)Action都需要的攔截器堆棧,例如:都需要的攔截器堆棧,例如:login.jsp/secure/home可以按照如下的方式定義:可以按照如下的方式定義:login.jsp/secure/home轉(zhuǎn)換器一、概述一、概述在在B/S應(yīng)用中,將字符串請(qǐng)求參數(shù)轉(zhuǎn)換為相應(yīng)的數(shù)據(jù)類型,是應(yīng)用中,將字符串請(qǐng)求參數(shù)轉(zhuǎn)換為相應(yīng)的數(shù)據(jù)類型,是MVC框架提供的功能,框架提供的功能,而而Struts2是很好的是很好的MVC框架實(shí)現(xiàn)者,理所當(dāng)然,提供了類型轉(zhuǎn)換機(jī)制??蚣軐?shí)現(xiàn)者,理所當(dāng)然,提供了類型轉(zhuǎn)換機(jī)制。Struts2的類型轉(zhuǎn)換是基于的類型轉(zhuǎn)換是基于OGNL表達(dá)式的,只要我們把表達(dá)式的,只要我們把HTML
13、輸入項(xiàng)(表單元素和輸入項(xiàng)(表單元素和其他其他GET/POET的參數(shù))命名為合法的的參數(shù))命名為合法的OGNL表達(dá)式,就可以充分利用表達(dá)式,就可以充分利用Struts2的轉(zhuǎn)換的轉(zhuǎn)換機(jī)制。機(jī)制。除此之外,除此之外,Struts2提供了很好的擴(kuò)展性,開(kāi)發(fā)者可以非常簡(jiǎn)單的開(kāi)發(fā)自己的類型轉(zhuǎn)提供了很好的擴(kuò)展性,開(kāi)發(fā)者可以非常簡(jiǎn)單的開(kāi)發(fā)自己的類型轉(zhuǎn)換器,完成字符串和自定義復(fù)合類型之間的轉(zhuǎn)換??傊?,換器,完成字符串和自定義復(fù)合類型之間的轉(zhuǎn)換??傊琒truts2的類型轉(zhuǎn)換器提供了的類型轉(zhuǎn)換器提供了非常強(qiáng)大的表現(xiàn)層數(shù)據(jù)處理機(jī)制,開(kāi)發(fā)者可以利用非常強(qiáng)大的表現(xiàn)層數(shù)據(jù)處理機(jī)制,開(kāi)發(fā)者可以利用Struts2的類型轉(zhuǎn)換機(jī)
14、制來(lái)完成任意的類型轉(zhuǎn)換機(jī)制來(lái)完成任意的類型轉(zhuǎn)換。的類型轉(zhuǎn)換。 轉(zhuǎn)換器二、實(shí)現(xiàn)自定義類型轉(zhuǎn)換器 實(shí)現(xiàn)TypeCoverter接口,或者繼承DefaultTypeConverter實(shí)現(xiàn)類(該類實(shí)現(xiàn)了TypeCoverter接口),通過(guò)繼承該實(shí)現(xiàn)類來(lái)實(shí)現(xiàn)自己的類型轉(zhuǎn)換器。重寫convertValue方法即可。 為了簡(jiǎn)化類型轉(zhuǎn)換器的實(shí)現(xiàn),Struts2提供了一個(gè)StrutsTypeConverter抽象類,這個(gè)抽象類是DefaultConverter的子類。實(shí)現(xiàn)了方法,并提供了2個(gè)不同轉(zhuǎn)換方向的方法:Object convertToString(Map context,String values,Cl
15、ass toClass)和String convertFromString(Map context,Object o)。 轉(zhuǎn)換器三、注冊(cè)應(yīng)用 實(shí)現(xiàn)了自定義類型轉(zhuǎn)換器之后,將該類型轉(zhuǎn)換器注冊(cè)在Web應(yīng)用中,Struts2框架才可以正常使用該類型轉(zhuǎn)換器。 關(guān)于類型轉(zhuǎn)換器的注冊(cè)方式,主要有3種: A、注冊(cè)局部類型轉(zhuǎn)換器:僅僅對(duì)某個(gè)Action的屬性起作用。 B、注冊(cè)全局類型轉(zhuǎn)換器:對(duì)所有Action的特定類型的屬性都會(huì)生效。 C、使用JDK1.5的注釋來(lái)注冊(cè)類型轉(zhuǎn)換器:通過(guò)注釋方式來(lái)生成類型轉(zhuǎn)換器。 1、局部類型轉(zhuǎn)換器 提供如下格式的文件 文件名: ActionN
16、perties 內(nèi)容:多個(gè)propertyName(屬性名)=類型轉(zhuǎn)換器類(含包名),如 date=com.aumy.DateConverter 存放位置:和ActionName類相同路徑。 2、全局類型轉(zhuǎn)換器 提供如下格式的文件 文件名: perties 內(nèi)容: 多個(gè)“復(fù)合類型對(duì)應(yīng)類型轉(zhuǎn)換器”項(xiàng)組成,如 java.Util.Date=com.aumy.DateConverter 存放位置:WEB-INF/classes/目錄下。 轉(zhuǎn)換器struts2內(nèi)建類型轉(zhuǎn)換器內(nèi)建類型轉(zhuǎn)換器如下類型可以相互轉(zhuǎn)化:boolean和Boolean:完成字符串和布爾值之間的轉(zhuǎn)換; char和Character:完成字符串和字符之間的轉(zhuǎn)換; int和In
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 聽(tīng)評(píng)課記錄九年級(jí)物理
- 人教版數(shù)學(xué)七年級(jí)下冊(cè)知識(shí)點(diǎn)
- 粵教版地理八年級(jí)下冊(cè)第六章第4節(jié)《西部地區(qū)》聽(tīng)課評(píng)課記錄4
- 湘教版數(shù)學(xué)八年級(jí)下冊(cè)1.2《直角三角形的性質(zhì)和判定(II)》聽(tīng)評(píng)課記錄
- 小學(xué)二年級(jí)數(shù)學(xué)100道口算題
- 湘教版數(shù)學(xué)七年級(jí)下冊(cè)2.2.2《完全平方公式》聽(tīng)評(píng)課記錄1
- 人教版數(shù)學(xué)七年級(jí)下冊(cè)聽(tīng)評(píng)課記錄9.1.1《 不等式及其解集》
- 2025年水利管理及技術(shù)咨詢服務(wù)項(xiàng)目合作計(jì)劃書
- 合伙開(kāi)餐飲餐館項(xiàng)目協(xié)議書范本
- 融資咨詢代理協(xié)議書范本
- 2022年上海市初中畢業(yè)數(shù)學(xué)課程終結(jié)性評(píng)價(jià)指南
- DB15T 2058-2021 分梳綿羊毛標(biāo)準(zhǔn)
- 高考作文備考-議論文對(duì)比論證 課件14張
- (高職)銀行基本技能ppt課件(完整版)
- 新華師大版七年級(jí)下冊(cè)初中數(shù)學(xué) 7.4 實(shí)踐與探索課時(shí)練(課后作業(yè)設(shè)計(jì))
- 山東省萊陽(yáng)市望嵐口礦區(qū)頁(yè)巖礦
- 《普通生物學(xué)教案》word版
- 機(jī)動(dòng)車維修經(jīng)營(yíng)備案告知承諾書
- 安全生產(chǎn)應(yīng)知應(yīng)會(huì)培訓(xùn)課件
- 猴車司機(jī)試題
- 剪力墻、樓板開(kāi)洞專項(xiàng)施工方案
評(píng)論
0/150
提交評(píng)論