什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是
这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能,本篇分享的是: 【什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?】 标题: 【修真院java 小课堂】什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系? 开场语: 大家好,我是IT修真院郑州分院第12期的学员张泉良,一枚正直纯洁善良的JAVA程序员,今天给大家分享一下,修真院官网JAVA任务二,深度思考中的知识点——什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系? 1. 背景介绍: Filter是什么 过滤器:依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤, 一个过滤器实例只能在容器初始化时调用一次 Interceptor是什么 依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。 在实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种运用, 就是在一个方法前,调用一个方法,或者在方法后,调用一个方法 AOP是什么 AOP(Aspect-Oriented Programming)是一种编程思想,对OOP的补充 常见实现:Filter和拦截器(代理模式) OOP: 对于所有对象中都存在的一些公共行为,无能为力 为减少重复代码,AOP(面向切面)技术诞生 2. 知识剖析: 2.1 Filter 的使用: (1)在HttpServletRequest 到达Servlet 之前,拦截客户的HttpServletRequest (2)根据需要检查HttpServletRequest ,也可以修改HttpServletRequest 头和数据 (3)根据需要检查HttpServletResponse ,可以修改HttpServletResponse 头和数据 2.2 创建一个Filter (1)创建Filter 处理类 init方法、destory方法、doFilter方法 (2)在web.xml 文件中配置Filter 2.3 interceptor 使用 通过实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter抽象类, 复写preHandle()、postHandle()和afterCompletion()来对用户的请求进行拦截处理 3. 常见问题: 3.1 Filter与interceptor的区别 (1) 接口定义不同 Filter 接口定义在 javax.servlet 包中,接口 HandlerInterceptor 定义在org.springframework.web.servlet 包中 (2) 规范不同 Filter 是在 Servlet 规范中定义的,是 Servlet 容器支持的;拦截器是在 Spring容器内的,是Spring框架支持的 (3) 使用资源不同 拦截器是一个Spring的组件,归Spring管理,因此能使用Spring里的任何资源、 ?对象;Filter 不能够使用 Spring 容器资源 (4) 深度不同 Filter在只在 Servlet 前后起作用;拦截器能够深入到方法前后、异常抛出前后等。 (5) 调用者不同 Filter 是被 Server 调用;Interceptor 是被 Spring 调用。 因此 Filter 总是优先于 Interceptor 执行 3.2 多个过滤器执行顺序 (1): 执行 第一个Filter中chain.doFilter()之前的部分 (2): 执行 第二个Filter中chain.doFilter()之前的部分 (3): 业务逻辑 (4): 执行 第二个Filter中chain.doFilter()之后的部分 (5): 执行 第一个Filter中chain.doFilter()之后的部分 3.3 面向切面编程 (1)通知(增强)Advice:你想要的功能 (2)连接点 Join point:spring允许你是通知(Advice)的地方 ? ? ? ?spring 方法,AspectJ支持构造器或属性注入时 (3)切点 Pointcut:连接点的基础上,来定义切入点 (4)切面 Aspect:通知和切入点的结合 (5)引入 Introduction: 向现有的类添加新方法属性 (6)织入 Weaving : 切面应用到目标对象来创建新的代理对象的过程 4. 编码实战: 5. 拓展思考: 5.1 多个过滤器与拦截器的代码执行顺序 过滤器在servlet启动后开始执行,进入页面访问开始执行拦截器 5.2 AOP实现,统一异常 重点在切点的定义,异常可以为预期异常和非预期异常,处理方式不同 5.2 监听器 以监听Web应用的上下文信息、Servlet请求信息和Servlet会话信息,即ServletContext、ServletRequest、HttpSession 执行顺序:监听器>过滤器>拦截器 6. 参考文献: ? Filter及FilterChain的使用: (1)https://blog.csdn.net/zhaozheng7758/article/details/6105749 ? ?监听器: (2)https://www.cnblogs.com/dudududu/p/8507735.html ? filter、interceptor、aop实现: (3)https://blog.csdn.net/FU250/article/details/80292293 7.? 更多讨论: Q1:Listener的分类有哪些? A1:按照对象 Servlet的Listener监听器包括三种类型: ? ? ? ServletContextListener 监听ServletContext对象 ? ? ?HttpSessionListener 监听Session对象 ? ? ?HttpRequestListener 监听Request对象 ? ? ?按照监听事件类型划分: ? ? ?用于监听域对象自身的创建和销毁的事件监听器。 ? ? ?用于监听域对象的属性的增加和删除的事件监听器。 ? ? 用于监听绑定到HttpSession域中的某个对象的状态的事件监听器。 Q2:过滤器的执行过程,调用接口的顺序 A2:如果有多个过滤器,那么过滤器的初始化顺序是web.xml中配置由下到上的; ? ? 注意:容器启动的时候的初始化顺序是由下到上,但是在用户进行资源的访问的时候; ? ?过滤器复写的public void doFilter方法是由上至下的按照web.xml中配置的顺序由上到下执行。 Q3:监听器其主要作用是什么? A3:统计在线人数,利用HttpSessionLisener;加载初始化信息:利用ServletContextListener; ? ? ? 统计网站访问量实现访问监控 8.? 鸣谢: 9.? 结束语: 今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~ PPT链接?视频链接 更多内容,可以加入IT交流群565734203与大家一起讨论交流 这里是技能树·IT修真院:,初学者转行到互联网的聚集地 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |