监听器、过滤器、拦截器

107 阅读2分钟

监听器Listener

监听器用于监听Web应用中某些对象的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当监听范围的对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计网站在线人数、系统加载时进行信息初始化、统计网站的访问量等等。

HttpSessionListener监听session状态计算登录人数、、
ServletContextLister监听应用启动数据库拦截池初始化

过滤器Filter

  • 通过实现Filter接口实现或者@WebFilter注解实现
  • 一共三个方法需要实现
    • init():容器初始化时调用,只调用一次
    • doFilter():每次请求调用,需要调用fiterChain.doFiter()掉下一个过滤器
    • destroy():容器销毁时调用,只调用一次
  • 主要用在一些权限拦截,中文乱码处理

拦截器interceptor(不属于javaweb,而是spring的)

  • 通过实现HandlerInterceptor接口实现
  • 一共三个方法需要实现
    • preHandler():在请求处理前执行,返回fasle时视为请求结束,所有的拦截器都不执行了
    • postHandler():调用controller方法后执行的
    • afterCompletion:执行完preHandler方法并返回true时并且响应给视图后执行的
  • 主要用户非法限制

image.png

过滤器与拦截器的不同

过滤器拦截器
底层原理底层基于函数调用底层基于java反射
使用范围在servlet包下定义的,所以使用需要依赖容器(tomcat等)是spring的一个组件不依赖容器
触发范围在servlet之前就能触发在setvlet之后才能触发
拦截处理范围几乎所有进入容器的请求都能过滤到只会处理controller和static下的请求
注入bean的情况能正常注入bean由于拦截器加载在springcontext之前(springcontext加载才会创建bean对象),所以不能正常注入
控制执行顺序方式通过@Oder()注解控制,越小越先执行通过注册时的顺序执行;但是由于底层源码原因,preHandle()会按顺序执行,postHandle()会反过来执行

image.png