分享人:张鑫
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
为什么要深入了解Filter和Interceptor
Filter和Interceptor是我们在做任务时(主要是任务二和任务五)常用的配置,比如字符集过滤以及自动认证拦截器,但是filter和Interceptor到底是如何工作的,两者有什么区别,最重要的是如何利用它们完成更多其他的功能,这些都需要我们进一步的了解掌握
Filter和Interceptor的概念
Filter可以认为是Servlet的一种“加强版”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
Interceptor是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个Action执行的前后执行的代码,也可以在一个Action执行前阻止其执行。同时也提供了一种可以提取Action中可重用的部分的方式。
Filter和Interceptor的作用
Filter的作用
1.在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest
2.根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
3.在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
4.根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
通俗点说就是"欺上瞒下",不论是客户端的请求还是处理之后的响应都经过一番包装或更改之后再传递,只给你我想给你的
Interceptor的作用
最主要的作用就是在请求到达控制器(servlet)之前进行筛选拦截,对拦截到的请求执行某些功能,也可以选择是否将请求送达控制器.
通俗点说就是看门的,不论是什么请求我让你通过你才能通过,不符合规则的一律不让通过
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中.
执行顺序. 过滤前-拦截前-控制器执行-拦截后-过滤后
Filter,Interceptor和AOP的关系
Filter和Interceptor都是可以在控制器执行的前后额外的执行一些动作,乍一看和AOP一样,那么Filter和Inteceptor是不是都是AOP呢?两者是不是一个东西呢?
答案是否定的.
Interceptor和AOP可以看作是类似的,因为其内部实现原理都是利用JAVA的反射机制(AOP是使用动态代理,动态代理的实现就是java反射机制).但是Filter和Interceptor有本质上的区别.其实现是通过回调函数.两者的控制粒度也不同,AOP和Interceptor的控制粒度都是方法级别,但是Filter的控制粒度就是servlet容器,它只能在servlet容器执行前后进行处理
如何获取页面表单的隐藏属性中设置的HTTP方法
通过配置filter过滤器来获取真正请求的HTTP方法
Filter和Interceptor还有什么用法
Filter还可以用于敏感词汇过滤,压缩响应信息等
Interceptor一般主要就是用于自动登陆认证
感谢观看,如有出错,恳请指正
BY : 张鑫