struts2自定義攔截器並配置攔截器使其生效
阿新 • • 發佈:2019-01-29
首先編寫一個struts2的攔截器,要繼承 MethodFilterInterceptor
並獲取其中的方法
package star.july.d_interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; //自定義一個攔截器 public class Interceptor extends MethodFilterInterceptor{ @Override protected String doIntercept(ActionInvocation invocation) throws Exception { //攔截器的方法 //獲得代理物件 ActionProxy proxy = invocation.getProxy(); System.out.println(proxy); //獲取被代理物件action Object action = proxy.getAction(); System.out.println(action); //獲取action的名稱 String actionName = proxy.getActionName(); System.out.println(actionName); //獲得方法 String method = proxy.getMethod(); System.out.println(method); //獲取名稱空間 String namespace = proxy.getNamespace(); System.out.println(namespace); //配置 System.out.println(proxy.getConfig()); //執行結果 System.out.println(proxy.getExecuteResult()); //呼叫 System.out.println(proxy.getInvocation()); System.out.println("1、在action之前"); //放行 invocation.invoke(); System.out.println("3、在action之後"); return null; } }
再在struts.xml中配置該攔截器使其生效:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="interceptor" namespace="/interceptor" extends="struts-default"> <interceptors> <!-- 為自己建立的攔截器配置 --> <interceptor name="myinterceptor" class="star.july.d_interceptor.Interceptor" ></interceptor> <interceptor-stack name="mystack"> <interceptor-ref name="myinterceptor"></interceptor-ref> <!-- 預設的攔截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <action name="inter_*" class="star.july.d_interceptor.TypesAction" method="{1}"> <!-- 引用攔截器棧 --> <interceptor-ref name="mystack"></interceptor-ref> <result name="success">/property.jsp</result> </action> </package> </struts>