攔截器的工作原理如圖 攔截器是由每一個(gè)action請(qǐng)求(request)都包裝在一系列的攔截器的內(nèi)部,通過redirectAction再一次發(fā)送請(qǐng)求。
攔截器可以在Action執(zhí)行直線做相似的操作也可以在Action執(zhí)行直后做回收操作。
我們可以讓每一個(gè)Action既可以將操作轉(zhuǎn)交給下面的攔截器,Action也可以直接退出操作返回客戶既定的畫面。
接下來我們?cè)撊绾味x一個(gè)攔截器:
自定義一個(gè)攔截器如下:
1、實(shí)現(xiàn)Interceptor接口或者繼承AbstractInterceptor抽象類。
2、創(chuàng)建一個(gè)Struts.xml文件進(jìn)行定義攔截器。
3、在需要使用的Action中引用上述定義的攔截器,為了方便也可將攔截器定義為默認(rèn)的攔截器(
這樣在不加特殊聲明的情況下所有的Action都被這個(gè)攔截器攔截loginView,login。
①Interceptor接口聲明三個(gè)方法:
public class LoginInterceptor implements Interceptor { private Mapsession = null; public void destroy() { } public void init() { } public String intercept(ActionInvocation actionInvocation) throws Exception { 8 Object myAction = actionInvocation.getAction(); if(myAction instanceof UserAction){ System.out.println("你訪問的Action是UserAction,不要校驗(yàn)Session,否則死循環(huán)"); //放行 return actionInvocation.invoke(); }else{ System.out.println("你訪問的Action是:"+myAction); } session = ActionContext.getContext().getSession(); Object user = session.get("user"); if (user!=null){ return actionInvocation.invoke(); }else{ return "login"; } } 注:該方法可以不加:loginView,login