一、什么是拦截器
拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者定义一个action前后执行的代码,也可以在一个action执行阻止其执行,同时也是提供了一种可以提取action可重用部分的方式。实现原理:大部分是通过代理的方式来调用的。
自定义拦截器步骤:
自定义一个实现了Interceptor接口的类,或者继承抽象类AbstractInterceptor。
在配置文件中注册定义的拦截器。
在需要使用Action中引入定义的拦截器,为了方便也可以把拦截器定义为默认的拦截器。所有的Action都会被这个拦截器拦截
在AOP中用于在某个方法或字段被访问之前,进行拦截然后再之前货之后加入某些操作。拦截是AOP的一种实现策略。
二、什么是过滤器
过滤器是一个程序,他先于与之相关的servlet或jsp也可以运行在服务器上。过滤器可附加到一个或多个servlet或jsp页面上,并且可以检查进入这些资源的请求信息。以常规的方式调用资源
利用修改过的请求信息调用资源
调用资源,但在发送响应到客户机前对其进行修改
阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。
过滤器的基本原理:在Servlet作为过滤器使用时,他可以对客户的请求进行处理。处理完成后,他会交给下一个过滤器处理,这样,客户的请求在过滤器链中逐个处理,直到请求发送到目标为止。
三、拦截器与过滤器的区别
1 、拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2 、拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
3 、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4 、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
5 、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。