拦截器的第一种实现方式:直接实现interceptor
拦截器的第二种实现方式:
继承
AbstractInterceptor (
AbstractInterceptor 实现了
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>