struts拦截器拦截只能action ,拦截器需要在struts配置文件进行配置。
拦截器配置文件:
拦截器类实现:
如何自定义一个拦截器?
自定义一个拦截器需要三步:
1自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。
2在strutx.xml中注册上一步中定义的拦截器。
3在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截。
Interceptor接口声明了三个方法:
public interface Interceptor extends Serializable {
void destroy();
void init();
String intercept(ActionInvocation invocation) throws Exception;
}
Init方法在拦截器类被创建之后,在对Action镜像拦截之前调用,相当于一个post-constructor方法,使用这个方法可以给拦截器类做必要的初始话操作。
Destroy方法在拦截器被垃圾回收之前调用,用来回收init方法初始化的资源。
Intercept是拦截器的主要拦截方法,如果需要调用后续的Action或者拦截器,只需要在该方法中调用invocation.invoke()方法即可,在该方法调用的前后可以插入Action调用前后拦截器需要做的方法。如果不需要调用后续的方法,则返回一个String类型的对象即可,例如Action.SUCCESS。
另外AbstractInterceptor提供了一个简单的Interceptor的实现,这个实现为:
public abstract class AbstractInterceptor implements Interceptor {
public void init() {
}
public void destroy() {
}
public abstract String intercept(ActionInvocation invocation) throws Exception;
}
在不需要编写init和destroy方法的时候,只需要从AbstractInterceptor继承而来,实现intercept方法即可。即图2拦截器类实现
过滤器需要配置在web.xml中,配置文件如下
servlet过滤器可以对几乎所有请求起作用。
过滤器实现类:
服务启动会依次执行filter的init方法
-intercept的init方法,当有action请求时,intercept拦截进intercept方法,当有访问jsp或servlet..时 进filter的doFilter方法,action走完跳转的页面filter不会拦截