过滤器和拦截器以及监听器

过滤器(Filter)

1 过滤器是Web应用中的一个组件,它能够对客户端和服务器之间的请求(Request)和响应(Response)进行拦截和处理

2过滤器基于函数回调机制,依赖于Servlet容器

3过滤器可以对几乎所有的请求起作用,可以在请求到达Servlet之前或响应发送给客户端之后对请求和响应进行加工处理

应用场景

  • 字符编码转换:确保客户端和服务器之间传输的数据编码一致。
  • 日志记录:记录请求和响应的详细信息,便于问题追踪和性能分析。
  • 权限控制:根据用户权限决定是否允许访问某些资源

配置方式

在web.xml文件中通过<filter><filter-mapping>标签进行配置

拦截器(Interceptor)

拦截器则主要用于拦截方法调用、消息传递或请求处理等,以便在目标方法执行之前或之后执行某些预处理或后处理工作。在Java EE或Spring框架中,拦截器常用于实现横切关注点,如日志记录、事务管理、安全检查等。

拦截器通常是通过实现特定的拦截器接口,并配置到框架的拦截器链中来实现的。当请求到达时,框架会根据配置依次调用拦截器链中的拦截器,最后调用目标方法。在目标方法执行前后,拦截器可以执行自定义的逻辑

  • 拦截器是基于Java的反射机制实现的,不依赖于Servlet容器。
  • 拦截器只能对action请求起作用,即它主要工作在MVC框架的Controller层。
  • 拦截器可以访问action上下文、值栈里的对象,因此可以进行更细粒度的操作。
  • 在action的生命周期中,拦截器可以多次被调用

应用场景

  • 登录检查:在用户访问需要登录的页面时,检查用户是否已经登录。
  • 权限验证:根据用户的角色和权限,决定用户是否可以访问某个资源。
  • 数据处理:在请求处理前后对数据进行加工处理,如参数校验、响应数据格式化等。

配置方式

  • 在Spring MVC中,拦截器通常配置在Spring配置文件中,而不是web.xml中。
  • 通过实现HandlerInterceptor接口并定义preHandlepostHandleafterCompletion等方法来实现拦截逻辑

监听器(Listener)

监听器主要用于监听某种事件的发生,并在事件发生时执行相应的处理逻辑。在Java EE或Spring框架中,监听器常用于监听应用程序的生命周期事件、HTTP请求/响应事件、会话(Session)事件等。例如,在Web开发中,可以使用监听器来监听ServletContext的创建和销毁、HTTP会话的创建和销毁、请求属性的变化等。

监听器通常是通过实现特定的事件监听接口,并将其实例注册到相应的容器或管理器中来实现的。当特定事件发生时,容器或管理器会自动调用监听器的相应方法来处理该事件

  • 监听器是专门用于监听Web应用中某些事件或状态改变的对象。
  • 当被监听的对象(如ServletContext、HttpSession、ServletRequest等)发生变化时,监听器会收到通知并执行相应的处理逻辑。
  • 监听器在Web应用启动时跟随启动,停止时跟随销毁,但只初始化一次

应用场景

  • 加载初始化信息:如数据库连接池的配置、系统参数的加载等。
  • 统计在线人数:通过监听Session的创建和销毁来统计当前在线的用户数。
  • 监听Web应用的启动和关闭:在Web应用启动和关闭时执行特定的初始化或清理操作。

配置方式

  • 在web.xml文件中通过<listener>标签进行配置,并指定监听器类的全限定名
相关推荐
likuolei4 小时前
XSL-FO 软件
java·开发语言·前端·数据库
正一品程序员4 小时前
vue项目引入GoogleMap API进行网格区域圈选
前端·javascript·vue.js
j***89464 小时前
spring-boot-starter和spring-boot-starter-web的关联
前端
star_11124 小时前
Jenkins+nginx部署前端vue项目
前端·vue.js·jenkins
im_AMBER4 小时前
Canvas架构手记 05 鼠标事件监听 | 原生事件封装 | ctx 结构化对象
前端·笔记·学习·架构
JIngJaneIL4 小时前
农产品电商|基于SprinBoot+vue的农产品电商系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·农产品电商系统
Tongfront4 小时前
前端通用submit方法
开发语言·前端·javascript·react
可爱又迷人的反派角色“yang”4 小时前
LVS+Keepalived群集
linux·运维·服务器·前端·nginx·lvs
han_4 小时前
前端高频面试题之CSS篇(二)
前端·css·面试
JIngJaneIL4 小时前
书店销售|书屋|基于SprinBoot+vue书店销售管理设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·书店销售管理设计与实现