大家好,我是IT修真院深圳分院JAVA第02期学员,一枚正直纯洁善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA(职业)任务2深度思考中的知识点——Filter和Interceptor的区别.
注:本篇文章部分内容转载自www.cnblogs.com/luoyun/archive/2013/01/04/2844274.html
1.概念
Filter和Interceptor的概念
Filter可以认为是Servlet的一种“加强版”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
Interceptor是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个Action执行的前后执行的代码,也可以在一个Action执行前阻止其执行。同时也提供了一种可以提取Action中可重用的部分的方式。
2.作用
Filter的作用
(1).在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest
(2).根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
(3).在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
(4).根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
通俗点说就是"欺上瞒下",不论是客户端的请求还是处理之后的响应都经过一番包装或更改之后再传递,只给你我想给你的
Interceptor的作用
最主要的作用就是在请求到达控制器(servlet)之前进行筛选拦截,对拦截到的请求执行某些功能,也可以选择是否将请求送达控制器.
通俗点说就是看门的,不论是什么请求我让你通过你才能通过,不符合规则的一律不让通过
Filter还可以用于敏感词汇过滤,压缩响应信息等
Interceptor一般主要就是用于自动登陆认证
3.区别
Filter和Interceptor的区别
1. Filter是基于函数回调的,而Interceptor则是基于Java反射的。
2. Filter依赖于Servlet容器,而Interceptor不依赖于Servlet容器。
3. Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用。
4. 在action的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。所以Fileter配置在web.xml中,而Interceptor配置在springmvc-servlet.xml中.
执行顺序. 过滤前-拦截前-控制器执行-拦截后-过滤后
4.Filter,Interceptor和AOP的关系
Interceptor和AOP可以看作是类似的,因为其内部实现原理都是利用JAVA的反射机制(AOP是使用动态代理,动态代理的实现就是java反射机制).但是Filter和Interceptor有本质上的区别.其实现是通过回调函数.两者的控制粒度也不同,AOP和Interceptor的控制粒度都是方法级别,但是Filter的控制粒度就是servlet容器,它只能在servlet容器执行前后进行处理.
参考文献:
参考文献一:过滤器(Filter)和拦截器(Interceptor)的区别
参考文献二:Java三大器(过滤器,监听器,拦截器)
参考文献三:解决tomcat8无法处理PUT和DELETE请求的问题
PPT链接:PPT