什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jnshu_it/article/details/84783229

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

什么是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修真院:https://www.jnshu.com,初学者转行到互联网的聚集地

猜你喜欢

转载自blog.csdn.net/jnshu_it/article/details/84783229