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

过滤器(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>标签进行配置,并指定监听器类的全限定名
相关推荐
pepedd8649 分钟前
浅谈js拷贝问题-解决拷贝数据难题
前端·javascript·trae
@大迁世界10 分钟前
useCallback 的陷阱:当 React Hooks 反而拖了后腿
前端·javascript·react.js·前端框架·ecmascript
跟橙姐学代码11 分钟前
学Python别死记硬背,这份“编程生活化笔记”让你少走三年弯路
前端·python
前端缘梦11 分钟前
深入理解 Vue 中的虚拟 DOM:原理与实战价值
前端·vue.js·面试
Fantastic_sj12 分钟前
React 19 核心特性
前端·react.js·前端框架
VaJoy12 分钟前
Cocos Creator Shader 入门 ⒂ —— 自定义后处理管线
前端·cocos creator
小高00713 分钟前
📌React 路由超详解(2025 版):从 0 到 1 再到 100,一篇彻底吃透
前端·javascript·react.js
Data_Adventure17 分钟前
Java 与 TypeScript 的“同名方法”之争:重载机制大起底
前端·typescript
summer77720 分钟前
GIS三维可视化-Cesium
前端·javascript·数据可视化
HWL567923 分钟前
pnpm(Performant npm)的安装
前端·vue.js·npm·node.js