在Struts2中有很多很多的Interceptor,要定义自己的拦截器,可以先看看它们是怎么实现的,它们有些是extends一些特定的Interceptor,但百变不离其宗的是拦截器都实现了Interceptor这个接口,下面我定义一个MyInterceptor:
public class MyInterceptor implements Interceptor{
public void destroy() {
}
public void init() {
}
public String intercept(ActionInvocation arg0) throws Exception {
System.out.println("invoke before");
String str = arg0.invoke();
System.out.println("invoke after");
return str;
}
}
这个MyInterceptor我只写了它最重要的Intercept方法,在调用invoke方法的前后我各打印了一句话,当然你也可以执行自己的操作了,这里我只是简单的演示一下。
MyInterceptor实现好了,我们必须把它部署到我们的Struts上,首先我们必须在struts.xml文件中的package中定义一个interceptors标签,然后在标签里面定义一个interceptor标签,name属性是你自定义拦截器取的名字,class属性是MyInterceptor的全类名,这样子还不够,你的拦截器要在哪里用呢?所以在我们需要用到的action标签里面定义一个interceptor-ref标签,name对应上面的name,但是要注意到如果我们这么定义的话,原来的Struts内嵌的Interceptor就会给我们覆盖掉,所以我们要加多一个interceptor-ref标签,name为defaultStack,加上原来Struts的Interceptor,运行一个就可以看到效果了。
<interceptors>
<interceptor name="MyInterceptor" class="com.xujianguo.util.MyInterceptor"></interceptor>
</interceptors>
<interceptor-ref name="MyInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>