拦截器代码:
public class InterCeptorOrder extends AbstractInterceptor
{
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
public void setName(String name)
{
this.name = name;
}
@Override
public String intercept(ActionInvocation arg0) throws Exception
{
System.out.println("拦截器: " + name + " 开始执行...");
String result = arg0.invoke();
System.out.println("拦截器: " + name + " 执行结束...");
return result;
}
}
action代码:
public class ForOrder extends ActionSupport
{
/**
*
*/
private static final long serialVersionUID = 1946267712173673489L;
public String hello() throws Exception
{
System.out.println("-----------------------");
return SUCCESS;
}
}
Struts配置:
<interceptors>
<interceptor name="orderTest" class="com.kewen.InterCeptorOrder"/>
</interceptors>
<action name="hello" class="com.kewen.ForOrder" method="hello">
<result name="success">/index.jsp</result>
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="orderTest">
<param name="name"> 拦截器1号 </param>
</interceptor-ref>
<interceptor-ref name="orderTest">
<param name="name"> 拦截器2号 </param>
</interceptor-ref>
<interceptor-ref name="orderTest">
<param name="name"> 拦截器3号 </param>
</interceptor-ref>
</action>
运行结果如下:
拦截器: 拦截器1号 开始执行...
拦截器: 拦截器2号 开始执行...
拦截器: 拦截器3号 开始执行...
-----------------------
拦截器: 拦截器3号 执行结束...
拦截器: 拦截器2号 执行结束...
拦截器: 拦截器1号 执行结束...
也就是说拦截器是按照配置顺序执行的,这也是为什么配置自定义拦截器后希望执行默认拦截器的话,Struts2默认拦截器需要配置在自定义拦截器之前