struts攔截器

 

衆所周知,Struts2的大部分功能都是通過攔截器實現的,就算是Struts2的啓動也是使用Servlet的攔截器啓動的,下

面我們來說一下自定義Struts2攔截器,其實只要是學過Servlet的攔截器,就應該明白大概原理,基本上是差不多的。

首先需要寫一個類,實現Struts2的指定接口,com.opensymphony.xwork2.interceptor.Interceptor;

  1. package com.bird.action;  
  2.   
  3. import com.opensymphony.xwork2.ActionContext;  
  4. import com.opensymphony.xwork2.ActionInvocation;  
  5. import com.opensymphony.xwork2.interceptor.Interceptor;  
  6.   
  7. public class PermissionInterceptor implements Interceptor {  
  8.   
  9.       
  10.     private static final long serialVersionUID = 1L;  
  11.   
  12.     public void destroy() {  
  13.         // TODO Auto-generated method stub   
  14.   
  15.     }  
  16.   
  17.     public void init() {  
  18.         // TODO Auto-generated method stub   
  19.   
  20.     }  
  21.   
  22.     public String intercept(ActionInvocation action) throws Exception {  
  23.         Object value = ActionContext.getContext().getSession().get("user");  
  24.         if(value != nullreturn action.invoke();  
  25.         ActionContext.getContext().put("message""您沒有權限登錄");  
  26.         return "message";  
  27.     }  
  28.   
  29. }  

和Servlet攔截器類似,主要都是在intercept這個方法上了,這裏判斷session裏面是否有值,如果有值就調用攔截器後

面的Action的方法,這樣就完成了攔截器的任務,沒有servlet裏面的攔截器鏈。下面的工作就是註冊攔截器,在

struts.xml這個配置文件裏面這樣配置。

  1. <package name="niao" namespace="/t" extends="struts-default">  
  2.         <interceptors>  
  3.             <interceptor name="permission" class="com.bird.action.PermissionInterceptor"/>  
  4.             <interceptor-stack name="permissionStack">  
  5.                 <interceptor-ref name="defaultStack"></interceptor-ref>  
  6.                 <interceptor-ref name="permission"></interceptor-ref>  
  7.             </interceptor-stack>  
  8.         </interceptors>  
  9.           
  10.             <global-results>  
  11.             <result name="message">/WEB-INF/jsp/hello.jsp</result>  
  12.             </global-results>  
  13.       
  14.             <action name="login_*" class="com.bird.action.Login" method="{1}">  
  15.                   
  16.             <interceptor-ref name="permissionStack"/>  
  17.             <result name="success">/WEB-INF/jsp/hello.jsp</result>  
  18.           
  19.         </action>  
  20.     </package>  

這裏啓用了攔截器棧,這個意思是因爲一旦你定義了自己的攔截器就把struts默認的攔截器都給屏蔽掉了,這樣的話

很多struts的功能就不能使用了,所以使用了攔截器棧,這樣把struts默認的和你自定義的都放在了一個堆棧中,實現

了自定義和默認的攔截器的同時使用,默認堆棧的名稱爲defalutStack,這個名字可以在struts-default.xml文件裏面找

到,不能寫錯了。然後定義了一個全局信息處理頁面,最後在action定義裏面直接把攔截器堆棧放到裏面去就行了。

總體感覺還是挺簡單的,至少和servlet差不多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章