java struts學習-攔截器
阿新 • • 發佈:2017-10-10
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 protectedString 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學習-攔截器