拦截器的第一种实现方式:直接实现interceptor
拦截器的第二种实现方式:继承AbstractInterceptor (AbstractInterceptor
实现了interceptor接口,并对init,destory进行了空实现)
实现了interceptor接口,并对init,destory进行了空实现)
public class TheInterceptor1 implements Interceptor { public void destroy() { System.out.println("destroy invoked !!"); } public void init() { System.out.println("init invoked !!!"); } public String intercept(ActionInvocation invocation) throws Exception { System.out.println("intercept1 invoked before !!!"); String value = invocation.invoke(); System.out.println("intercept1 invoked after !!!"); return value; } }
拦截器的第三种实现方式:继承MethodsFilterInterceptor (对指定方法进行拦截)
public class TheInterceptor3 extends MethodFilterInterceptor { protected String doIntercept(ActionInvocation invocation) throws Exception { invocation.addPreResultListener(new TheListener()); System.out.println("doIntercept3 invoked before !!!"); invocation.invoke(); System.out.println("doIntercept3 invoked after !!!"); return null; } }
配置文件:struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="struts2" extends="struts-default"> <interceptors> <interceptor name="theintercept1" class="db.struts.interceptor.TheInterceptor1"> <param name="test">init value ~!</param> </interceptor> <interceptor name="theintercept2" class="db.struts.interceptor.TheInterceptor2"></interceptor> <interceptor name="theintercept3" class="db.struts.interceptor.TheInterceptor3"></interceptor> <interceptor name="theintercept4" class="db.struts.interceptor.TheInterceptor4"></interceptor> </interceptors> <global-results> <result name="usernameExceptione">/usernameException.jsp</result> <result name="passwordException">/passwordException.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="usernameExceptione" exception="UsernameException"></exception-mapping> <exception-mapping result="passwordException" exception="PasswordException"></exception-mapping> </global-exception-mappings> <action name="login" class="db.my.struts.loginAction"> <result name="success">/result.jsp</result> <result name="input">/login.jsp</result> </action> <action name="login2" class="db.my.struts.loginAction2"> <result name="success">/result.jsp</result> <result name="input">/login.jsp</result> </action> <action name="userAction" class="db.my.struts.UserAction"> <result name="success">/test2.jsp</result> </action> <action name="userAction2" class="db.my.struts.UserAction2"> <result name="success">/test2.jsp</result> </action> <action name="action1" class="db.my.struts.Action1"> <result name="success" type="redirectAction"> <param name="actionName">action2</param> <param name="username">${username}</param> <param name="password">${password}</param> <param name="usernameAndPassword">${usernameAndPassword}</param> <param name="kaku">hello world !!!</param> </result> </action> <action name="action2" class="db.my.struts.Action2" method="myExecute"> <!-- action 指定了method方法,拦截器就会只拦截指定的这个method方法! --> <result name="success">/action2.jsp</result> <result name="invalid.token">/action3.jsp</result> <interceptor-ref name="token"></interceptor-ref> <interceptor-ref name="theintercept1"></interceptor-ref> <interceptor-ref name="theintercept2"></interceptor-ref> <interceptor-ref name="theintercept3"> <param name="includeMethods">execute,myExecute</param> <param name="excludeMethods">myExecute</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action> <action name="moden" class="db.my.struts.ModenAction"> <result name="success">/ModenAccept.jsp</result> <result name="input">/action3.jsp</result> </action> <action name="action4" class="db.my.struts.action4"> <result name="success">/ModenAccept.jsp</result> <interceptor-ref name="theintercept4"> <param name="includeMethods">getPassword,execute</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package> </struts>