1. 程式人生 > >java struts學習-攔截器

java struts學習-攔截器

nbsp n) 詳解 允許 變量 code tex 只有一個 這一

引言:

Struts2攔截器,每個攔截器類只有一個對象實例,即采用單例模式,所有引用這個攔截器的Action都共享這一攔截器類的實例,因此,在攔截器中如果使用類變量,要註意同步問題。

• 攔截器是在訪問某個方法,字段之前或之後實施攔截。

• 攔截器是AOP的一種實現

• 攔截器棧(Interceptor Stack)

– 攔截器棧就是將攔截器按一定的順序聯結成一條鏈。

– 在訪問被攔截的方法或字段時,攔截器鏈中的攔截器就會按其之前定義的順序被調用。

• 實現原理

– Struts2攔截器的實現原理相對簡單,當請求struts2的action時,Struts 2會查找配置文件,並根據其配置實例化相對應攔截器對象,然後串成一個列表,最後一個一個地調用列表中的攔截器。

代碼詳解

 1 //要實現自定義攔截器需要繼承一個MethodFilterceptor類
 2 public class LoginInterceptor extends MethodFilterInterceptor{
 3    private Map<String,Object> session=null;
 4    protected
String doIntercept(ActionInvocation actionInvocation) throws Exception{ 5 session = ActionContext.getContext().getSession(); 6 Object use=session.get("user"); 7 if(user!=null){ 8 return actionInvocation.invoke();//允許通過 9 }else{ 10 return "login";
11 } 12 } 13 }
//在struts.xml配置文件中使用自定義的攔截器
<interceptors>
     //自定義攔截器棧
     <interceptor name="loginInterceptor" class="com.nf.action.LoginInterceptor"></interceptor>
     <interceptor-stack name="myStack">
         <interceptor-ref name="loginInterceptor">
                  <param name="excludeMethods">loginView,login</param> //excludeMethods表示排除指定的方法,即不對標記為excludeMethods的方法進行攔截,
         </interceptor-ref>
     </interceptor-stack>
</interceptors>
//配置一個默認攔截器,也就是所有的Action都會被攔截,除了param-->
<default-interceptor-ref name="myStack">

java struts學習-攔截器