首页 » 技术分享 » 什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?

什么是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.参考文献

7.更多讨论

(1)Listener的分类有哪些?

  • 按照对象 Servlet的Listener监听器包括三种类型:

    • ServletContextListener 监听ServletContext对象
    • HttpSessionListener 监听Session对象
  • HttpRequestListener 监听Request对象
  • 按照监听事件类型划分:
    • 用于监听域对象自身的创建和销毁的事件监听器。
    • 用于监听域对象的属性的增加和删除的事件监听器。
    • 用于监听绑定到HttpSession域中的某个对象的状态的事件监听器。

(2)监听器是全局监听还是局部监听?能不能实现局部和短时间的监听?

  • ServletContext :上下文;
    应用服务器一启动就产生该对象,服务器关闭即销毁
    作用于全局,所有Servlet ,相当于静态变量
  • HttpSession 会话
    客户端第一次请求产生,session过期销毁
    作用于同一个客户端,相当于成员变量
    短时间的监听的可以使用定时任务或或者手动设置session的时间。

(3)过滤器的执行过程,调用接口的顺序
如果有多个过滤器,那么过滤器的初始化顺序是web.xml中配置由下到上的(注意:容器启动的时候的初始化顺序是由下到上,但是在用户进行资源的访问的时候,
过滤器复写的public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)方法是由上至下的,也就是还是按照web.xml中配置的顺序由上到下执行,只是初始化的时候的顺序是相反的)

(4) 监听器其主要作用是什么?

  • 计在线人数,利用HttpSessionLisener
  • 加载初始化信息:利用ServletContextListener
  • 统计网站访问量实现访问监控

感谢观看,如有出错,恳请指正

转载自原文链接, 如需删除请联系管理员。

原文链接:什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?,转载请注明来源!

0