第5章Struts2攔截器_第1頁
第5章Struts2攔截器_第2頁
第5章Struts2攔截器_第3頁
第5章Struts2攔截器_第4頁
第5章Struts2攔截器_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、5.1 攔截器概述攔截器概述5.2 攔截器的配置攔截器的配置5.3 自定義攔截器自定義攔截器Struts 2框架內(nèi)建了大量的攔截器,這些攔截器可以在struts-default.xml(位于Struts 2完整版srccoresrcmainresources目錄下)中查看。Struts 2框架給出了這么多的攔截器,下面簡要介紹它們的作用。 alias:實(shí)現(xiàn)在不同請求中相似參數(shù)別名的轉(zhuǎn)換。 autowiring:這是個(gè)自動裝配Spring,主要用于當(dāng)Struts 2和Spring整合時(shí),Struts 2可以使用自動裝配的方式來訪問Spring容器中的Bean。 chain:構(gòu)建一個(gè) Action

2、 鏈,使當(dāng)前 Action 可以訪問前一個(gè) Action 的屬性,一般和一起使用。 conversionError:這是一個(gè)負(fù)責(zé)處理類型轉(zhuǎn)換錯(cuò)誤的攔截器,它負(fù)責(zé)將類型轉(zhuǎn)換錯(cuò)誤從ActionContext中取出,并轉(zhuǎn)換成Action的FieldError錯(cuò)誤。 createSession:該攔截器負(fù)責(zé)創(chuàng)建一個(gè)HttpSession對象,主要用于那些需要有HttpSession對象才能正常工作的攔截器。 debugging:當(dāng)使用Struts 2的開發(fā)模式時(shí),這個(gè)攔截器會提供更多的調(diào)試信息。 execAndWait:后臺執(zhí)行Action,負(fù)責(zé)將等待畫面發(fā)送給用戶。 exception:這個(gè)攔截器負(fù)

3、責(zé)處理異常,它將異常映射為結(jié)果。 fileUpload:這個(gè)攔截器主要用于文件上傳,它負(fù)責(zé)解析表單中文件域的內(nèi)容。 il8n:這是支持國際化的攔截器,它負(fù)責(zé)把所選的語言、區(qū)域放入用戶Session中。 logger:這是一個(gè)負(fù)責(zé)日志記錄的攔截器,主要是輸出Action的名字。 modelDriven:這是一個(gè)用于模型驅(qū)動的攔截器,當(dāng)某個(gè)Action類實(shí)現(xiàn)了ModelDriven接口時(shí),它負(fù)責(zé)把getModel()方法的結(jié)果堆入ValueStack中。 scopedModelDriven:如果一個(gè)Action實(shí)現(xiàn)了一個(gè)ScopedModelDriven接口,該攔截器負(fù)責(zé)從指定生存范圍中找出指定的

4、Model,并將通過setModel方法將該Model傳給Action實(shí)例。 params:這是一個(gè)最基本的攔截器,它負(fù)責(zé)解析HTTP請求中的參數(shù),并將參數(shù)值設(shè)置成Action對應(yīng)的屬性值。 prepare:如果Action實(shí)現(xiàn)了Preparable接口,將會調(diào)用該攔截器的prepare()方法。 staticParams:這個(gè)攔截器負(fù)責(zé)將xml中標(biāo)簽下標(biāo)簽中的參數(shù)傳入Action。 scope:這是范圍轉(zhuǎn)換攔截器,它可以將Action狀態(tài)信息保存到HttpSession范圍,或者保存到ServletContext范圍內(nèi)。 servletConfig:如果某個(gè)Action需要直接訪問Servl

5、et API,可以通過這個(gè)攔截器實(shí)現(xiàn)。 timer:這個(gè)攔截器負(fù)責(zé)輸出Action的執(zhí)行時(shí)間,在分析該Action的性能瓶頸時(shí)比較有用。 token:這個(gè)攔截器主要用于阻止重復(fù)提交,它檢查傳到Action中的token,防止多次提交。 tokenSession:這個(gè)攔截器的作用與前一個(gè)基本類似,只是它把token保存在HttpSession中。 validation:通過執(zhí)行在xxxAction-validation.xml中定義的校驗(yàn)器,完成數(shù)據(jù)校驗(yàn)。 workflow:這個(gè)攔截器負(fù)責(zé)調(diào)用Action類中的validate方法,如果校驗(yàn)失敗,則返回input的邏輯視圖。 roles:這是一個(gè)

6、JAAS(Java Authentication and Authorization Service,Java授權(quán)和認(rèn)證服務(wù))攔截器,只有當(dāng)瀏覽者取得合適的授權(quán)后,才可以調(diào)用被該攔截器攔截的Action。攔截器的配置是在struts.xml中完成的,定義一個(gè)攔截器使用標(biāo)簽,其格式如下:這種情況的應(yīng)用非常廣。有的時(shí)候,如果需要在配置攔截器時(shí)就為其傳入攔截器參數(shù),只要在與之間配置標(biāo)簽即可。其格式如下:參數(shù)值./如果需要傳入多個(gè)參數(shù),可以一并設(shè)置在struts.xml中可以配置多個(gè)攔截器,它們被包在之間,如下面的配置:./action配置如果要應(yīng)用這些攔截器,就需要在配置中引用這些攔截器,一個(gè)需要應(yīng)

7、用多個(gè)攔截器,這樣就不免要有多條引用語句(引用攔截器用標(biāo)簽),所以Struts 2給出了攔截器棧的使用,一個(gè)攔截器棧中可以包含多個(gè)攔截器,配置攔截器棧的格式為: ./這里還可以配置很多攔截器,但前提是這些攔截器已經(jīng)配這里還可以配置很多攔截器,但前提是這些攔截器已經(jīng)配置存在置存在其實(shí),在Struts 2框架中也配置有很多攔截器棧,在Struts 2的struts-default.xml中可以發(fā)現(xiàn)有如下攔截器棧的配置。在struts-default.xml文件的最后還有這樣一句代碼:該句是用來配置默認(rèn)攔截器棧的,Struts 2框架自動配置了默認(rèn)攔截器棧,這樣每次當(dāng)用戶請求經(jīng)過Struts 2框架

8、處理時(shí)都會先由“defaultStack”這個(gè)默認(rèn)攔截器棧來處理。攔截器或攔截器棧配置完成后就可以在中對其引用了,一個(gè)action引用攔截器或攔截器棧的格式如下:可以看出,在為action指定攔截器時(shí),配置了:5.3.1 攔截器實(shí)現(xiàn)類攔截器實(shí)現(xiàn)類Struts 2提供了一些接口或類供程序員自定義攔截器。例如,Struts 2提供了erceptor.Interceptor接口,程序員只要實(shí)現(xiàn)該接口就可完成自定義攔截器類的編寫。該接口的代碼如下:public interface Interceptor extends Serializablevo

9、id init();String intercept(ActionInvocation invocation) throws Exception;void destroy();該接口中有如下三種方法。 init():該方法在攔截器被實(shí)例化之后、攔截器執(zhí)行之前調(diào)用。 intercept(ActionInvocation invocation):該方法用于實(shí)現(xiàn)攔截的動作。 destroy():該方法與init()方法對應(yīng),攔截器實(shí)例被銷毀之前調(diào)用。除了Interceptor接口之外,Struts 2框架還提供了AbstractInterceptor類,該類實(shí)現(xiàn)了Interceptor接口,并提供了

10、init()方法和destroy()方法的空實(shí)現(xiàn)。在一般的攔截器實(shí)現(xiàn)中,都會繼承該類,因?yàn)橐话銓?shí)現(xiàn)的攔截器是不需要打開資源的,故無須實(shí)現(xiàn)這兩種方法,繼承該類會更簡潔。該類的代碼實(shí)現(xiàn)為:public interface AbstractInterceptor implements Interceptorpublic AbstractInterceptor();public void init();public void destroy();public abstract String intercept(ActionInvocation invocation) throws Exception;

11、【實(shí)例實(shí)例5.1】編寫一個(gè)自定義的攔截器類,并測試其可用性。1創(chuàng)建創(chuàng)建Struts 2項(xiàng)目項(xiàng)目建立項(xiàng)目,取項(xiàng)目名為“InterceptorTest”。加載Struts 2包及修改web.xml文件,配置Struts 2,操作同【實(shí)例2.1】的第1步、第2步,不再贅述。2自定義攔截器類自定義攔截器類創(chuàng)建自定義攔截器類“MyInterceptor.java”,編寫代碼如下:package erceptor;import com.opensymphony.xwork2.ActionInvocation;import erceptor

12、.AbstractInterceptor;public class MyInterceptor extends AbstractInterceptorpublic String intercept(ActionInvocation arg0) throws Exception System.out.println(我在Action前執(zhí)行-);String result=arg0.invoke();System.out.println(我在Action后執(zhí)行-);return result;3編寫測試用編寫測試用Action創(chuàng)建Action類“TestAction.java”,編寫代碼如下:pa

13、ckage org.action;import com.opensymphony.xwork2.ActionSupport;public class TestAction extends ActionSupportpublic String execute() throws Exception System.out.println(我在Action中執(zhí)行-);return NONE;/不做任何跳轉(zhuǎn)4配置攔截器配置攔截器在struts.xml中配置Action及攔截器,代碼如下:5運(yùn)行測試運(yùn)行測試做完這些簡單的工作后,部署項(xiàng)目并啟動服務(wù)器,在瀏覽器中輸入“http:/localhost:9080

14、/InterceptorTest/test.action”請求,再查看控制臺,出現(xiàn)如圖5.1所示的界面?!緦?shí)例實(shí)例5.2】用Struts 2框架內(nèi)建的token攔截器處理用戶重復(fù)提交的頁,以防錯(cuò)誤發(fā)生。1創(chuàng)建創(chuàng)建Struts 2項(xiàng)目項(xiàng)目建立項(xiàng)目,取項(xiàng)目名為“TokenInterceptor”。加載Struts 2包及修改web.xml文件,配置Struts 2,操作同【實(shí)例2.1】的第1步、第2步,不再贅述。2創(chuàng)建登錄頁創(chuàng)建登錄頁修改index.jsp作為登錄頁面:登錄界面 3編寫編寫Action編寫Action類LoginAction.java,代碼如下:package org.action;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupportprivate String username;/用戶名private String password;/密碼/省略上述屬性的get和set方法public String execute() throws Exception return SUCCESS;4配置攔截器配置攔截器在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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論