您好,登錄后才能下訂單哦!
在java項目中如何使用Struts2攔截器?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
1、攔截器是什么?
攔截器相當于過濾器:就是將不想要的去掉,想要的留下。攔截器抽象出一部分代碼可以用來完善原來的action。同時可以減輕代碼冗余,提高重用率。通俗地講就是一張網,過濾掉不需要的沙子,留下水。
2、攔截器的作用:
攔截器可以構成特定的功能。比如權限認證、日志記錄和登陸判斷。
3、攔截器的原理:
其每一個Action請求都在攔截器中,每一個action可以將操作轉交給下面的攔截器,也可以直接退出到界面上。
4、定義攔截器:
(1)自定義一個實現Interceptor接口(不過我初學者一般直接實現框架中的Interceptor)
(2)在struts.xml中注冊定義的攔截器
(3)可以需要的action中引用攔截器
Interceptor接口聲明了三個方法
public interface Interceptor extends Serializable { void destroy(); void init(); String intercept(ActionInvocation invocation) throws Exception; }
Init方法是在action作用之前調用,就是開始給爛機器的初始化操作。
Destory方法在攔截器被垃圾回收之前調用,用來回收init方法初始化的資源。
interceptor方法是攔截器的主要操作。如果需要調用后續的Action或者攔截器,只需要在該方法中調用invocation.invoke()方法即可,在該方法調用的前后可以插入Action調用前后攔截器需要做的方法。
現在對用戶登錄進行攔截,代碼如下:
public String intercept(ActionInvocation invocation) throws Exception { System.out.println("在action執行之前"); ActionContext actionContext=invocation.getInvocationContext(); Map<String,Object> session=actionContext.getSession(); Object currentUser=session.get("currentUser"); String result=null; if(currentUser!=null){ result=invocation.invoke(); }else{ HttpServletRequest request=(HttpServletRequest)invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST); request.setAttribute("error", "請先登錄"); result="error"; } System.out.println("result+"+result); System.out.println("在action執行之后"); return result; }
注冊攔截器:
<interceptors> <interceptor name="myInterceptor" class="com.fangchao.interceptor.MyInterceptor"></interceptor> <interceptor name="loginInterceptor" class="com.fangchao.interceptor.LoginInterceptor"></interceptor> <interceptor-stack name="myStack"> <interceptor-ref name="loginInterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors>
上述代碼中的interceptor-stack是個攔截器棧。到目前為止,就是在下面引用時,比較方便。一般來講,每個action都會使用defaultStack。
攔截器參數:
配置參數:
有兩種配置方式:
<interceptor-ref name="validation"> <param name="excludeMethods">myValidationExcudeMethod</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">myWorkflowExcludeMethod</param> </interceptor-ref>
或者
<interceptor-ref name="defaultStack"> <param name="validation.excludeMethods">myValidationExcludeMethod</param> <param name="workflow.excludeMethods">myWorkflowExcludeMethod</param> </interceptor-ref>
看完上述內容,你們掌握在java項目中如何使用Struts2攔截器的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。