Struts2的攔截器優(yōu)秀課件_第1頁
Struts2的攔截器優(yōu)秀課件_第2頁
Struts2的攔截器優(yōu)秀課件_第3頁
Struts2的攔截器優(yōu)秀課件_第4頁
Struts2的攔截器優(yōu)秀課件_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論