配置自己的拦截器可以先参照下系统的拦截器是怎么配置的,首先打开struts-default.xml搜索下interceptor;系统里的拦截器有很多,拦截器都是放在堆栈里的,系统引用的是默认堆栈, <interceptor-stack name="defaultStack">;
struts2.3版本下的默认堆栈里放有19个拦截器。我们随便找一个系统拦截器,找到那个类点进去,可以看到,系统的拦截器都继承自AbstractInterceptor,知道这些,那么我们可以自己创建一个自己的拦截器了:如
package cn.jbit.Iterceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class MyInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invoc) throws Exception {
long begin=System.currentTimeMillis();
System.out.println("开始时间为:"+begin);
//拦截器和过滤器相似,都是一个链,都得有一个放行的方法,不然就没法继续进行了
String result=invoc.invoke();
//拦截器返回的结果是携带action的返回结果
System.out.println("结果为:"+result);
long end =System.currentTimeMillis();
System.out.println("结束时间为:"+end);
System.out.println("时间差为:"+(end-begin));
return result;
}
}
最后在struts.xml配置文件里的packge里加入(切记放置顺序,拦截器要放在action标签的上面):
<!-- 自己手动配置的拦截器 -->
<interceptors>
<!-- 自己的拦截器 -->
<interceptor name="myinter" class="cn.jbit.Iterceptor.MyInterceptor"></interceptor>
<!-- 把拦截器放进自己的堆栈中 -->
<interceptor-stack name="mystack">
<!-- 自己的堆栈首先引用自己的拦截器 -->
<interceptor-ref name="myinter"></interceptor-ref>
<!-- 自己的堆栈再加上系统配好的19个拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 默认引用自己的堆栈拦截器 -->
<default-interceptor-ref name="mystack"></default-interceptor-ref>