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

下載本文檔

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

文檔簡介

1、基于Struts框架實(shí)現(xiàn)企業(yè)級(jí)WEB應(yīng)用第第五五章章Struts 2Struts 2攔截器攔截器課程回顧課程回顧在在Struts2Struts2中配置包時(shí)繼承自什么包中配置包時(shí)繼承自什么包struts-defaultstruts-default在在struts.xmlstruts.xml中什么元素用于將一個(gè)配置文件分解成多個(gè)配中什么元素用于將一個(gè)配置文件分解成多個(gè)配置文件置文件includeinclude什么結(jié)果類型是什么結(jié)果類型是Struts2Struts2默認(rèn)的結(jié)果類型?還有其他什么結(jié)默認(rèn)的結(jié)果類型?還有其他什么結(jié)果類型?果類型?dispatcherdispatcherredirectre

2、directchainchainredirectActionredirectAction學(xué)習(xí)學(xué)習(xí)內(nèi)容內(nèi)容攔截器工作原理攔截器工作原理Struts 2Struts 2自帶攔截器自帶攔截器自定義攔截器自定義攔截器能力能力目標(biāo)目標(biāo)理解理解Struts2Struts2攔截器的工作原理攔截器的工作原理掌握在掌握在Struts2Struts2中開發(fā)自定義攔截器中開發(fā)自定義攔截器為什么要使用攔截器為什么要使用攔截器對(duì)于對(duì)于Struts2Struts2框架的框架的ActionAction而言,總會(huì)有一些經(jīng)常性的操作,例如而言,總會(huì)有一些經(jīng)常性的操作,例如,對(duì)用戶輸入的數(shù)據(jù)進(jìn)行校驗(yàn)、解析文件上傳表單中的文件域、

3、防,對(duì)用戶輸入的數(shù)據(jù)進(jìn)行校驗(yàn)、解析文件上傳表單中的文件域、防止表單的多次提交、通過檢查會(huì)話中的用戶狀態(tài)限制用戶非法登錄止表單的多次提交、通過檢查會(huì)話中的用戶狀態(tài)限制用戶非法登錄等等 通過在配置文件中指定攔截器,從而可以讓攔截器方法在目標(biāo)方法通過在配置文件中指定攔截器,從而可以讓攔截器方法在目標(biāo)方法執(zhí)行之前或執(zhí)行之后自動(dòng)執(zhí)行,從而完成通用操作的動(dòng)態(tài)插入執(zhí)行之前或執(zhí)行之后自動(dòng)執(zhí)行,從而完成通用操作的動(dòng)態(tài)插入在這種策略下那些經(jīng)常性的操作都被定義成相應(yīng)的攔截器在這種策略下那些經(jīng)常性的操作都被定義成相應(yīng)的攔截器什么是攔截器什么是攔截器攔截器是動(dòng)態(tài)攔截?cái)r截器是動(dòng)態(tài)攔截ActionAction調(diào)用的對(duì)象。它

4、提供了一種機(jī)制可使開發(fā)調(diào)用的對(duì)象。它提供了一種機(jī)制可使開發(fā)者可以定義在一個(gè)者可以定義在一個(gè)actionaction執(zhí)行的前后執(zhí)行的代碼,也可以在一個(gè)執(zhí)行的前后執(zhí)行的代碼,也可以在一個(gè)actionaction執(zhí)行前阻止其執(zhí)行,同時(shí)也提供了一種可提取執(zhí)行前阻止其執(zhí)行,同時(shí)也提供了一種可提取actionaction中通用中通用操作的方式操作的方式Struts2 Struts2 攔截器攔截器ActionContextCleanUp其它的過濾器(如 SiteMesh等)FilterDispatcherAction代理配置管理器struts.xmlActionInvocation攔截器1攔截器2攔截器3A

5、ctionResult攔截器3攔截器2攔截器1Action映射器標(biāo)簽庫視圖模板-jsp-FreeMarker-等等HTTP響應(yīng)HTTP請(qǐng)求默認(rèn)的攔截器默認(rèn)的攔截器Struts2Struts2框架提供了許多攔截器,這些內(nèi)建的攔截器實(shí)現(xiàn)了框架提供了許多攔截器,這些內(nèi)建的攔截器實(shí)現(xiàn)了Struts2Struts2的大部分功能,的大部分功能,在在struts2-core-.jarstruts2-core-.jar的根目錄下有一個(gè)的根目錄下有一個(gè)struts-struts-default.xmldefault.xml文件,配置了默認(rèn)的攔截器。文件,配置了默認(rèn)的攔截器。默認(rèn)的攔截

6、器默認(rèn)的攔截器exceptionexception:捕獲異常并能根據(jù)異常類型映射到用戶自定:捕獲異常并能根據(jù)異常類型映射到用戶自定義的錯(cuò)誤頁面。義的錯(cuò)誤頁面。fileUploadfileUpload:提供文件上傳功能。:提供文件上傳功能。paramsparams:將請(qǐng)求中的參數(shù)設(shè)置到:將請(qǐng)求中的參數(shù)設(shè)置到ActionAction的屬性上。的屬性上。scopescope:將:將ActionAction狀態(tài)存入狀態(tài)存入sessionsession和和applicationapplication的簡單的簡單方法。方法。servletConfigservletConfig:提供訪問:提供訪問HttpS

7、ervletRequestHttpServletRequest和和HttpServletResponseHttpServletResponse的方法,以的方法,以MapMap的方式訪問。的方式訪問。tokentoken:防止表單重復(fù)提交。:防止表單重復(fù)提交。tokenSessiontokenSession:和:和tokentoken一樣,不過雙擊的時(shí)候把請(qǐng)求一樣,不過雙擊的時(shí)候把請(qǐng)求的數(shù)據(jù)存儲(chǔ)在的數(shù)據(jù)存儲(chǔ)在sessionsession中。中。validationvalidation:執(zhí)行數(shù)據(jù)校驗(yàn)。:執(zhí)行數(shù)據(jù)校驗(yàn)。workflowworkflow:調(diào)用:調(diào)用ActionAction的的valid

8、atevalidate方法,一旦有錯(cuò)誤返方法,一旦有錯(cuò)誤返回就終止執(zhí)行流程?;鼐徒K止執(zhí)行流程。Struts2Struts2框架提供了許多攔截器,這些內(nèi)建的攔截器實(shí)現(xiàn)框架提供了許多攔截器,這些內(nèi)建的攔截器實(shí)現(xiàn)了了Struts2Struts2的大部分功能,但是一些系統(tǒng)邏輯相關(guān)的通用的大部分功能,但是一些系統(tǒng)邏輯相關(guān)的通用功能,則可以通過自定義攔截器來實(shí)現(xiàn)功能,則可以通過自定義攔截器來實(shí)現(xiàn)自定義的攔截器類,應(yīng)該實(shí)現(xiàn)自定義的攔截器類,應(yīng)該實(shí)現(xiàn)erceptor.Iercepto

9、r.Interceptor接口接口 創(chuàng)建自定義的攔截器創(chuàng)建自定義的攔截器public interface Interceptor extends Serializable /銷毀攔截器之前的回調(diào)方法銷毀攔截器之前的回調(diào)方法 void destroy(); /初始化該攔截器的回調(diào)方法初始化該攔截器的回調(diào)方法 void init(); /攔截器實(shí)現(xiàn)攔截的邏輯方法攔截器實(shí)現(xiàn)攔截的邏輯方法 String intercept(ActionInvocation invocation) throws Exception;intercept(Actionlnvocationintercept(Actionln

10、vocation invocation)invocation),該方法是用,該方法是用戶需要實(shí)現(xiàn)的攔截器動(dòng)作,返回一個(gè)戶需要實(shí)現(xiàn)的攔截器動(dòng)作,返回一個(gè)resultresult配置字符串作配置字符串作為邏輯視圖。為邏輯視圖。該方法的該方法的ActionInvocationActionInvocation參數(shù)包含被攔截的參數(shù)包含被攔截的ActionAction的引的引用,可以通過調(diào)用該參數(shù)的用,可以通過調(diào)用該參數(shù)的invokeinvoke方法,將控制權(quán)轉(zhuǎn)給下方法,將控制權(quán)轉(zhuǎn)給下一個(gè)攔截器或者一個(gè)攔截器或者Action Action 創(chuàng)建自定義的攔截器創(chuàng)建自定義的攔截器業(yè)務(wù)描述:業(yè)務(wù)描述:用戶必須先

11、登錄然后才能訪問指定的用戶必須先登錄然后才能訪問指定的ActionAction和和JSPJSP視圖,使用攔截視圖,使用攔截器來限制未登錄用戶器來限制未登錄用戶。創(chuàng)建自定義的攔截器創(chuàng)建自定義的攔截器public class SysUserAction extends BaseAction private SysUserBizFace userBiz;private SysUser user;public String checkLogin()user=userBiz.checkLogin(user);if(user!=null)this.getSession().put(user,user);r

12、eturn success;elsereturn fail;./省略get/set方法Struts2Struts2還提供了一個(gè)還提供了一個(gè)erceptor.AbstractIerceptor.AbstractInterceptorerceptor類類, ,該類提供了一個(gè)該類提供了一個(gè)initinit和和destorydestory方法的空實(shí)現(xiàn)方法的空實(shí)現(xiàn)繼承自繼承自AbstractInterceptorAbstractInterceptor類來實(shí)現(xiàn)自定義攔截器會(huì)更類來實(shí)現(xiàn)自定義攔截器

13、會(huì)更加簡便加簡便 創(chuàng)建自定義的攔截器創(chuàng)建自定義的攔截器public class LoginInterceptor extends AbstractInterceptor public String intercept(ActionInvocation invocation) throws Exception HttpSession session=ServletActionContext.getRequest().getSession();SysUser user=(SysUser) session.getAttribute(user);if(user!=null)return invocat

14、ion.invoke();return login; 使用自定義攔截器使用自定義攔截器 /index.jsp 在interceptors元素中配置攔截器 定義包含新定義攔截器的攔截器棧當(dāng)配置一個(gè)包時(shí),可以為其指定默認(rèn)攔截器當(dāng)配置一個(gè)包時(shí),可以為其指定默認(rèn)攔截器 一旦為某個(gè)包指定了默認(rèn)攔截器,則該包中所有沒有指一旦為某個(gè)包指定了默認(rèn)攔截器,則該包中所有沒有指定攔截器的定攔截器的ActionAction都將受默認(rèn)攔截器作用都將受默認(rèn)攔截器作用默認(rèn)攔截器默認(rèn)攔截器 . . . 定義 名為myInterceptor、 testInterceptor攔截器 將myInterceptor配置成該包的默認(rèn)攔

15、截器 myInterceptor默認(rèn)攔截器會(huì)作用于action1 Action2僅受testInterceptor截器會(huì)作用Action3同時(shí)受兩個(gè)攔截器作用自定義默認(rèn)攔截器棧自定義默認(rèn)攔截器棧默認(rèn)攔截器默認(rèn)攔截器 . . . extends=struts-default 相當(dāng)于把struts2-core-2.0.11.jar下的struts-default.xml的東西給繼承過來了 其中包括N多的攔截器 定義多個(gè)攔截器時(shí)可以包含多個(gè) 攔截器棧中引用定義的攔截器和struts2默認(rèn)攔截器棧-defaultStack。 攔截器應(yīng)用攔截器應(yīng)用沒有權(quán)限創(chuàng)建用于提供主界面的創(chuàng)建用于提供主界面的JSPJ

16、SP頁面頁面 創(chuàng)建用于提供登錄界面的創(chuàng)建用于提供登錄界面的JSPJSP頁面頁面 創(chuàng)建錯(cuò)誤顯示的創(chuàng)建錯(cuò)誤顯示的JSPJSP頁面頁面創(chuàng)建一個(gè)用于處理用戶登錄的創(chuàng)建一個(gè)用于處理用戶登錄的Action Action 創(chuàng)建一個(gè)用于權(quán)限控制的攔截器創(chuàng)建一個(gè)用于權(quán)限控制的攔截器創(chuàng)建一個(gè)用于處理客戶業(yè)務(wù)邏輯的創(chuàng)建一個(gè)用于處理客戶業(yè)務(wù)邏輯的ActionAction創(chuàng)建一個(gè)用于處理商品業(yè)務(wù)邏輯的創(chuàng)建一個(gè)用于處理商品業(yè)務(wù)邏輯的Action Action 配置此示例配置此示例攔截器應(yīng)用攔截器應(yīng)用 權(quán)限管理攔截器權(quán)限管理攔截器創(chuàng)建用于提供主界面的創(chuàng)建用于提供主界面的JSPJSP頁面頁面 訂單管理系統(tǒng)操作功能列表 查詢客

17、戶 添加客戶 添加商品 修改商品 查詢商品 添加用戶權(quán)限管理攔截器權(quán)限管理攔截器創(chuàng)建用于提供登錄界面的創(chuàng)建用于提供登錄界面的JSPJSP頁面頁面 創(chuàng)建錯(cuò)誤顯示的創(chuàng)建錯(cuò)誤顯示的JSPJSP頁面頁面 用戶名: 密碼: $msg 權(quán)限管理攔截器權(quán)限管理攔截器創(chuàng)建一個(gè)用于處理用戶登錄的創(chuàng)建一個(gè)用于處理用戶登錄的Action Action public class UserPermitAction extends BaseAction private String uid;private String pwd;public String checkLogin()throws Exceptionif(ad

18、min.equals(uid)&admin.equals(pwd) |uid.equals(scott)&pwd.equals(tiger)this.getSession().put(role,uid);return success;this.getRequest().put(msg,用戶名或密碼錯(cuò)誤,用戶名或密碼錯(cuò)誤,登錄失敗!登錄失敗! +登錄登錄);return error;驗(yàn)證通過后將用戶存到session的role中,注意:用戶分為管理員和一般用戶兩種,該方法不經(jīng)過攔截器。/error.jsp.在配置文件中配置全局result項(xiàng) 權(quán)限管理攔截器權(quán)限管理攔截器創(chuàng)建一個(gè)用

19、于處理用戶登錄的創(chuàng)建一個(gè)用于處理用戶登錄的Action Action public class UserPermitAction extends BaseAction 。public String addUser() throws IOExceptionPrintWriter out=this.getResponse().getWriter();out.print(“正在執(zhí)行添加用戶的方法.);return null;另外增加添加用戶的方法,該方法要經(jīng)過攔截器的攔截。 權(quán)限管理攔截器權(quán)限管理攔截器創(chuàng)建一個(gè)用于處理客戶業(yè)務(wù)邏輯的創(chuàng)建一個(gè)用于處理客戶業(yè)務(wù)邏輯的ActionActionpublic

20、class CustAction extends BaseAction public String queryCust()throws ExceptionPrintWriter out=this.getResponse().getWriter();out.print(正在執(zhí)行查詢客戶的方法正在執(zhí)行查詢客戶的方法.);return null;public String addCust()throws ExceptionPrintWriter out=this.getResponse().getWriter();out.print(正在執(zhí)行添加客戶的方法正在執(zhí)行添加客戶的方法.);return n

21、ull; 權(quán)限管理攔截器權(quán)限管理攔截器創(chuàng)建一個(gè)用于處理商品業(yè)務(wù)邏輯的創(chuàng)建一個(gè)用于處理商品業(yè)務(wù)邏輯的ActionActionpublic class ShopAction extends BaseAction public String addShop()throws ExceptionPrintWriter out=this.getResponse().getWriter();out.print(正在執(zhí)行添加商品的方法正在執(zhí)行添加商品的方法.);return null;public String updateShop()throws ExceptionPrintWriter out=this.

22、getResponse().getWriter();out.print(正在執(zhí)行修改商品的方法正在執(zhí)行修改商品的方法.);return null;public String queryShop()throws ExceptionPrintWriter out=this.getResponse().getWriter();out.print(正在執(zhí)行正在執(zhí)行查詢查詢商品的方法商品的方法.);return null;處理具體商品業(yè)務(wù) 權(quán)限管理攔截器權(quán)限管理攔截器創(chuàng)建一個(gè)用于權(quán)限控制的攔截器創(chuàng)建一個(gè)用于權(quán)限控制的攔截器由于在由于在UserPermitAction UserPermitAction 中

23、登錄的中登錄的checkLogincheckLogin方法不能被攔截方法不能被攔截器攔截,所以需要繼承另一個(gè)抽象類器攔截,所以需要繼承另一個(gè)抽象類 MethodFilterInterceptor MethodFilterInterceptor ,并重寫,并重寫doIntercept(ActionInvocation invocation)doIntercept(ActionInvocation invocation)方法方法該攔截器可以通過配置文件配置哪些方法被攔截。該攔截器可以通過配置文件配置哪些方法被攔截。public class PermitInterceptor extends Met

24、hodFilterInterceptor public String doIntercept(ActionInvocation invocation) throws Exception ActionContext ctx=ActionContext.getContext();String role=(String)ctx.getSession().get(role);Map request=(Map) ctx.get(request);if(role=null) request.put(msg,沒有登錄,請(qǐng)先登錄!沒有登錄,請(qǐng)先登錄!登錄登錄); return error;else /獲得被攔

25、截的獲得被攔截的Action的執(zhí)行方法名的執(zhí)行方法名 String method=invocation.getProxy().getMethod().toLowerCase();/如果用戶的角色不是管理員,卻執(zhí)行了增刪改操作如果用戶的角色不是管理員,卻執(zhí)行了增刪改操作if(!admin.equals(role)&(method.startsWith(add)|method.startsWith(del)|method.startsWith(update)request.put(msg,您不是管理員,沒有權(quán)限執(zhí)行此操作!您不是管理員,沒有權(quán)限執(zhí)行此操作! +返回返回);return error;return invocation.invoke(); /若驗(yàn)證通過,則直接將請(qǐng)求交給對(duì)應(yīng)的控制器若驗(yàn)證通過,則直接將請(qǐng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論