




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第10章Struts2的攔截器目錄123Struts2的攔截器機(jī)制Struts2內(nèi)建攔截器自定義權(quán)限驗證的攔截器210.1Struts2的攔截器機(jī)制310.1.1為什么需要攔截器4對于任何優(yōu)秀的MVC框架,都會提供一些通用的操作,如請求數(shù)據(jù)的封裝、類型轉(zhuǎn)換、數(shù)據(jù)校驗、解析上傳的文件、防止表單的多次提交等。Struts2將它的核心功能放到攔截器中實現(xiàn)而不是集中放在核心控制器中實現(xiàn)。攔截器的方法在Action執(zhí)行之前或者執(zhí)行之后自動地執(zhí)行,從而將通用的操作動態(tài)地插入到Action執(zhí)行的前后,這樣有利于系統(tǒng)的解耦,這種功能的實現(xiàn)類似于我們自己組裝的電腦,變成了可拔插式。如果有一批攔截器經(jīng)常固定在一起使用,可以將這些小規(guī)模功能的攔截器定義成為大規(guī)模功能的攔截器棧。通過組合不同的攔截器,我們能夠以自己需要的方式來組合Struts2框架的各種功能。10.1.2攔截器的工作原理5攔截器能夠在一個Action執(zhí)行前后攔截它,類似于Servlet中的過濾器。攔截器圍繞著Action和Result的執(zhí)行而執(zhí)行,攔截器的工作方式如圖所示。Struts2攔截器實現(xiàn)原理和Servlet過濾器的實現(xiàn)原理差不多,以鏈?zhǔn)綀?zhí)行,對真正要執(zhí)行的方法execute()進(jìn)行攔截。攔截器的執(zhí)行過程可以看做是一個遞歸的過程,后續(xù)攔截器繼續(xù)執(zhí)行,最終執(zhí)行Action,這些都是通過遞歸調(diào)用ActionInvocation的invoke()方法實現(xiàn)的。每個incoke()方法被調(diào)用時,ActionInvocation都查詢執(zhí)行狀態(tài),調(diào)用下一個攔截器,直到最后一個攔截器,invoke()方法會執(zhí)行Action。10.1.3攔截器示例6通過示例代碼來講解攔截器的三個階段,代碼如下所示。public
classMyTimerInterceptorextendsAbstractInterceptor{
@Override
publicStringintercept(ActionInvocationinvocation)throwsException{
//預(yù)處理工作
long
startTime=System.currentTimeMillis();
//執(zhí)行后續(xù)攔截器或Action Stringresult=invocation.invoke();
//后續(xù)處理工作
long
executionTime=System.currentTimeMillis()-startTime; System.out.println("Theintervaltimeis"+executionTime+"millisecond");
return
result;}}10.2Struts2內(nèi)建攔截器710.2.1默認(rèn)攔截器8在Struts2中,內(nèi)建了大量的攔截器,這些攔截器以name-class對的形式配置在struts-default.xml文件中,name是攔截器的名稱,就是我們所引用的名字;class則指定了該攔截器所對應(yīng)的實現(xiàn),只要我們自己定義的包繼承了Struts2的默認(rèn)struts-default包,就可以使用默認(rèn)包中定義的內(nèi)建攔截器,否則必須自己定義這些攔截器。默認(rèn)攔截包括:params攔截器、staticParams攔截器、fileUpload攔截器、servletConfig攔截器、validation攔截器、workflow攔截器、exception攔截器。struts-default.xml,默認(rèn)攔截器和defaultStack攔截器棧包中的根目錄下找到struts-default.xml文件。struts-default.xml文件的結(jié)構(gòu)。10.2.2表單標(biāo)簽的公共屬性9在上面的示例中,看到了部分定義攔截器的代碼,要使用攔截器,需要以下兩個步驟:通過<interceptor……/>元素來定義攔截。通過<interceptor-ref……/>元素來使用攔截器。使用攔截器需要在struts.xml配置文件中,進(jìn)行相應(yīng)配置,示例代碼如下:引用攔截器時,Struts2并不區(qū)分?jǐn)r截器和攔截器棧,所以在定義攔截器棧時,可以引用其他的攔截器棧。<packagename="packageName"
extends="struts-default"
namespace="/">
<interceptors>
<!--定義攔截器-->
<interceptorname="interceptorName"
class="interceptorClass"/>
<!--定義攔截器棧-->
<interceptor-stackname="interceptorStackName">
<!--指定引用的攔截器-->
<interceptor-refname="interceptorName|interceptorStackName">
</interceptor-ref>
</interceptor-stack>
</interceptors>
<!--定義默認(rèn)的攔截器引用-->
<default-interceptor-refname="interceptorName|interceptorStackName"/>
<actionname="actionName"
class="actionClass">
<!--為Action指定攔截器引用-->
<interceptor-refname="interceptorName|interceptorStackName"
/>
<!--省略其他配置-->
</action></package>10.2.3自定義攔截器10在Struts2程序的開發(fā)中,如果想要開發(fā)自己的攔截器類,所有的Struts2攔截器都直接或間接實現(xiàn)接口。該接口提供三個方法,方法如下所示:voidinit():voiddestroy():Stringintercept(ActionInvocationinvocation)throwsException除此之外,繼承erceptor.AbstractInterceptor類是更簡單的一種實現(xiàn)攔截器的方式,AbstractInterceptor類提供了init()和destroy()方法的空實現(xiàn),這樣我們只需要實現(xiàn)intercept()方法,就可以創(chuàng)建我們自己的攔截器了。10.3自定義權(quán)限驗證的攔截器1110.3自定義權(quán)限驗證的攔截器12為登錄模塊開發(fā)一個自定義的攔截器來判斷用戶是否登錄。當(dāng)用戶需要請求執(zhí)行某個受保護(hù)的操作時,先檢查用戶是否已經(jīng)登錄。如果沒有登錄,則向用戶顯示登錄頁面;如果請求的用戶已經(jīng)登錄,則繼續(xù)操作。自定義權(quán)限驗證的攔截,實現(xiàn)思路如下:
新建登錄頁面login.jsp和主頁面main.jsp新建登錄請求處理業(yè)務(wù)類LogAction和顯示請求處理業(yè)務(wù)類ShowAction編寫AuthorityInterceptor自定義攔截器,繼承自AbstractInterceptor在struts.xml配置文件中定義攔截器并引用攔截器重新部署
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 制冷設(shè)備改造合同范本
- 保潔勞務(wù)合同范本臨時
- 單位與公司勞務(wù)合同范本
- 單位法人貸款合同范例
- 與國外合作合同范本
- 買貨物欠款合同范本
- 云服務(wù)技術(shù)合同范本
- 第四產(chǎn)程護(hù)理
- 交通銀行合同范本
- 并購租房公積金合同范本
- 中央2025年全國婦聯(lián)所屬在京事業(yè)單位招聘93人筆試歷年參考題庫附帶答案詳解
- 廣州2025年廣東廣州市番禺區(qū)小谷圍街道辦事處下屬事業(yè)單位招聘5人筆試歷年參考題庫附帶答案詳解
- CentOS 7系統(tǒng)配置與管理(Linux 試題庫) 習(xí)題答案 (楊海艷 第2版)
- 手機(jī)直連衛(wèi)星的可用頻率分析
- 2025年春新人教版歷史七年級下冊課件 第16課-明朝的對外關(guān)系
- 施工單位工程質(zhì)量自評報告三篇
- 部編四下語文《口語交際:轉(zhuǎn)述》公開課教案教學(xué)設(shè)計【一等獎】
- 充填開采之 矸石充填術(shù)
- 醫(yī)院醫(yī)療設(shè)備采購流程圖
- 人力外包項目實施方案
- BQB480-2014無取向電工鋼
評論
0/150
提交評論