过滤器(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
接口并定义preHandle
、postHandle
、afterCompletion
等方法来实现拦截逻辑
监听器(Listener)
监听器主要用于监听某种事件的发生,并在事件发生时执行相应的处理逻辑。在Java EE或Spring框架中,监听器常用于监听应用程序的生命周期事件、HTTP请求/响应事件、会话(Session)事件等。例如,在Web开发中,可以使用监听器来监听ServletContext的创建和销毁、HTTP会话的创建和销毁、请求属性的变化等。
监听器通常是通过实现特定的事件监听接口,并将其实例注册到相应的容器或管理器中来实现的。当特定事件发生时,容器或管理器会自动调用监听器的相应方法来处理该事件
- 监听器是专门用于监听Web应用中某些事件或状态改变的对象。
- 当被监听的对象(如ServletContext、HttpSession、ServletRequest等)发生变化时,监听器会收到通知并执行相应的处理逻辑。
- 监听器在Web应用启动时跟随启动,停止时跟随销毁,但只初始化一次
应用场景
- 加载初始化信息:如数据库连接池的配置、系统参数的加载等。
- 统计在线人数:通过监听Session的创建和销毁来统计当前在线的用户数。
- 监听Web应用的启动和关闭:在Web应用启动和关闭时执行特定的初始化或清理操作。
配置方式
- 在web.xml文件中通过
<listener>
标签进行配置,并指定监听器类的全限定名