struts自定义拦截器配置

时间:2023-11-22 16:14:14

配置自己的拦截器可以先参照下系统的拦截器是怎么配置的,首先打开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>