前几天有人跟我说interceptor跟filter差不多,这个当时还真把我蒙住了,我知道有区别,但没想清楚,这几天整理了一下。
首先从表现形式上来说,两者确实很相似,同样可以在你写的jsp、servlet代码的前后加入其它的动作,但是两者是有本质区别的。
1、 filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于java本身的反射机制,如果对这种形式不了解,可以去看看java是如何实现动态代理的,这是aop的基础。这是两者最本质的区别。
2、 filter是依赖于servlet容器的,即只能在servlet容器中执行,很显然没有servlet容器就无法来回调doFilter方法。而interceptor与servlet容器无关。