拦截器定义如下:
public class OrderInterceptor extends AbstractInterceptor{
private String name;
public String intercept(ActionInvocation ai) throws Exception{
String result="";
System.out.println("拦截器"+name+":开始执行");
result = ai.invoke();
System.out.println("拦截器"+name+":执行完毕");
return result;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
配置如下:
<action name="loginAction" class="com.demo1.action.LoginAction" method="checkLogin">
<result name="success">/index.jsp</result>
<result name="login">/login.jsp</result>
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="orderInterceptor">
<param name="name">1</param>
</interceptor-ref>
<interceptor-ref name="orderInterceptor">
<param name="name">2</param>
</interceptor-ref>
<interceptor-ref name="orderInterceptor">
<param name="name">3</param>
</interceptor-ref>
</action>
程序运行结果如下:
拦截器1:开始执行
拦截器2:开始执行
拦截器3:开始执行
Action执行
拦截器3:执行完毕
拦截器2:执行完毕
拦截器1:执行完毕
从上述结果看出,在Action执行之前,拦截器1先执行,然后拦截器2,拦截器3. Action执行完毕之后拦截器3先执行,然后拦截器2,然后拦截器3.所以如果在一个Action中配置多个拦截器,拦截器的执行顺序为先进后出。