详解web.xml中的listener与filter

web.xml中listener作用及使用 一.WebContextLoaderListener 监听类 它能捕捉到服务器的启动和停止,在启动和停止触发里面的方法做相应的操作! 它必须在web.xml 中配置才能使用,是配置监听类的 二.下面是搜集的一些listener方面的知识 简例一 监听用户上线与退出,显示 阅读详情

一、Listener(监听器)

作用​​:在 Servlet 规范中,Listener 用于监听 Servlet 容器中的事件(如 ServletContext、HttpSession 和 ServletRequest 的创建与销毁),并在事件发生时执行相应逻辑。

​​配置方式(web.xml 中)​​:

<listener>
    <listener-class>com.example.MyServletContextListener</listener-class>
</listener>
常用监听器接口
  • ​​ServletContextListener​​

    • 监听应用启动/关闭
    • 方法:contextInitialized()、contextDestroyed()
  • ​​HttpSessionListener​​

    • 监听 Session 创建/销毁
    • 方法:sessionCreated()、sessionDestroyed()
  • ​​ServletRequestListener​​

    • 监听请求开始/结束
    • 方法:requestInitialized()、requestDestroyed()
​​实现原理​​
  • ​​事件驱动模型​​:
    • 容器(如 Tomcat)在特定生命周期节点(如应用启动时)​​自动触发事件​​。
  • ​​反射实例化​​:
    • 容器通过<listener-class>反射创建监听器实例。
  • ​​回调方法​​:
    • 容器直接调用监听器的接口方法(如 contextInitialized())。
  • ​​执行顺序​​:
    • 按 web.xml 中定义的顺序执行。

​​示例代码​​:

public class MyServletContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("应用启动!加载数据库连接池...");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("应用关闭!释放资源...");
    }
}

二、Filter(过滤器)

作用​​:拦截请求/响应,在 ​​Servlet/JSP 执行前后​​添加处理逻辑(如权限验证、日志记录)。

​​配置方式(web.xml 中)​​:

<filter>
    <filter-name>AuthFilter</filter-name>
    <filter-class>com.example.AuthFilter</filter-class>
    <!-- 可选:初始化参数 -->
    <init-param>
        <param-name>blockedIPs</param-name>
        <param-value>192.168.1.1,10.0.0.2</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>AuthFilter</filter-name>
    <url-pattern>/admin/*</url-pattern> <!-- 拦截路径 -->
    <dispatcher>REQUEST</dispatcher>    <!-- 拦截类型(默认REQUEST) -->
</filter-mapping>
核心接口:javax.servlet.Filter
  • init(): 初始化时调用(配置<init-param>参数)
  • doFilter(): 拦截请求的核心逻辑
  • destroy(): 过滤器销毁时调用
​​实现原理​​
  • ​​责任链模式​​:
    • 多个过滤器组成链式结构,依次传递请求。
  • ​​拦截流程​​:
    • 用户请求 → 匹配<url-pattern> → 按顺序调用过滤器链 → 到达目标 Servlet/JSP → 响应逆向返回。
  • ​​关键对象​​:
    • FilterChain:调用 chain.doFilter() 将请求传递到下一环节。
  • ​​控制权转移​​:
    • 在 doFilter() 中,chain.doFilter() 前的代码在 ​​Servlet 执行前​​运行,之后的代码在 ​​Servlet 执行后​​运行。

​​执行顺序​​:按 <filter-mapping> 在 web.xml 中的定义顺序执行。

​​示例代码​:

public class AuthFilter implements Filter {
    public void init(FilterConfig config) {
        String ips = config.getInitParameter("blockedIPs");
        System.out.println("初始化过滤器,屏蔽IP:" + ips);
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        // 1. 前置处理:权限校验
        if (userNotLoggedIn()) {
            response.sendRedirect("/login");
            return;
        }
        // 2. 放行请求
        chain.doFilter(request, response);
        // 3. 后置处理:记录日志
        System.out.println("请求处理完成,记录操作日志...");
    }
}

​三、高级特性与对比​

​​特性​​ListenerFilter
​​主要用途​​响应生命周期事件拦截并处理请求/响应
​​执行时机​​事件触发时(如应用启动)请求到达 Servlet 前/响应返回前
​​配置顺序​​按 <listener> 声明顺序执行按 <filter-mapping> 顺序执行
​​共享数据​​通过 ServletContext 存储全局数据通过 request/session 传递数据
​​是否阻断请求​​否(仅事件响应)是(可通过 return 中断流程)
​​其他重要细节​​
  • ​​<dispatcher> 类型​​(Filter 专属):

    • REQUEST:直接请求(默认)
    • FORWARD:转发请求(RequestDispatcher.forward())
    • INCLUDE:包含请求(RequestDispatcher.include())
    • ERROR:错误页面跳转
  • ​​注解替代方案​​(Servlet 3.0+):

@WebListener // 替代 <listener>
public class MyListener implements ServletContextListener { ... }

@WebFilter(urlPatterns = "/secure/*") // 替代 <filter>
public class SecurityFilter implements Filter { ... }

四、典型应用场景​​

  • ​​Listener​​:

    • 应用启动时加载缓存/配置文件
    • 统计在线用户数(通过 HttpSessionListener)
    • 资源清理(如关闭线程池)
  • ​​Filter​​:

    • 统一设置字符编码(request.setCharacterEncoding("UTF-8"))
    • 防止 XSS 攻击(过滤请求参数中的恶意脚本)
    • 权限控制(检查 Session 中的用户信息)

​​注意​​:在微服务架构中,部分功能(如鉴权、日志)可迁移到网关层(如 Spring Cloud Gateway),但 Listener/Filter 仍是传统 Java Web 应用的核心组件。

五、关键注意事项

1. Listener注意事项

  • 初始化顺序:Listener优先于Servlet和Filter初始化,适合加载全局资源。
  • 线程安全:实现类需保证线程安全(如使用ThreadLocal或避免共享可变状态)。
  • 资源释放:在contextDestroyed中正确释放资源(如关闭数据库连接池)。

2. Filter注意事项

  • 拦截路径规则:
    • /*:拦截所有请求(包括JSP、Servlet、静态资源)。
    • *.jsp:仅拦截JSP文件。
    • /admin/*:拦截指定目录。
  • 性能影响:避免在Filter中执行耗时操作(如复杂计算或远程调用)。
  • 请求放行:必须调用chain.doFilter(),否则请求将被中断。

3. 通用最佳实践

  • XML结构规范:Listener配置需位于Servlet和Filter之前,遵循DTD/Schema定义。
  • 日志记录:在关键节点(如初始化、销毁、拦截)添加日志便于调试。
  • 版本兼容性:确保web.xml声明符合Servlet规范版本(如2.5+支持<filter>)。

六、总结

Listener和Filter作为Java Web的核心组件,分别通过事件驱动和责任链模式实现应用生命周期管理和请求处理拦截。合理配置二者可显著提升代码可维护性和系统扩展性,但需严格遵循实现规范以避免性能瓶颈和线程安全问题。

FPGA SPI驱动ADC避坑指南:以ADC128S022为例,详解时序设计与代码调试 本文以ADC128S022为例,详细解析FPGA通过SPI驱动ADC的时序设计与代码调试中的常见问题。从时钟分频计算、SPI模式选择到状态机实现,提供避坑指南和实战技巧,帮助工程师解决数据采集系统中的时序匹配难题。特别针对FPGA与ADC通信中的微妙差异,给出精确的Verilog代码示例和ModelSim仿真验证方法。 阅读详情

相关推荐

从内参矩阵到归一化平面:揭秘相机成像的标准化核心

本文深入解析了相机成像中的核心概念——归一化平面。通过拆解内参矩阵(包含焦距、主点等参数)的作用,详细阐述了如何将像素坐标转换为与具体相机硬件无关的归一化坐标。这一标准化过程是计算机视觉算法(如多相机系统对齐、视觉SLAM)实现跨设备通用性的关键,能有效提升算法的鲁棒性和泛化能力。

opencv7vision的博客 449

web.xml之filter使用详解

Servlet API的2.3版本中最重要的一个新功能就是能够为servlet和JSP页面定义过滤器。过滤器提供了某些早期服务器所支持的非标准“servlet链接”的一种功能强大且标准的替代品。        过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作

鹤啸九天 3778

Qt实战:用QCustomPlot实现毫秒级时间轴数据动态刷新(附完整代码)

本文深入探讨了在Qt框架下,如何利用QCustomPlot库高效实现毫秒级时间轴数据的动态刷新与实时可视化。针对工业物联网等高频数据场景,文章提供了从原理剖析、核心代码实现到性能优化的完整实战指南,包括滑动窗口管理、双定时器策略及坐标轴精确配置,帮助开发者构建稳定、流畅的专业级监控界面。

qsc90123456的博客 758

web学习:web.xml使用:listener标签的使用

web学习:web.xml使用:listener标签的使用1.认识web.xml1.1 listener标签1.2 简单使用 1.认识web.xml 从零开始学习java web,学习web最开始就不得不说web.xml,以前只知道web.xml对web应用来说很重要,却不知道为什么,现在来记录下学习web.xml的标签。 web.xml的加载过程(引用) 在web-app元素内,元素的配置顺序与...

qq_17275841的博客 3814

Krylov子空间与Arnoldi过程

一、应用背景 Krylov子空间方法是模型降阶(MOR)的一种,Krylov 子空间方法就是在Krylov子空间中寻找近似解。 二、Krylov子空间 n是原始矩阵的维度,m为降阶后矩阵的维度,通常m<<n。 三、Arnoldi 过程: 计算Km 的一组正交 对应上述MGS过程的python代码: import numpy as np def arnoldi_itera...

保持写作习惯,完成知识沉淀 6002

同物种,不同版本之间的坐标转化

是最常用的工具,如果有可用的链文件,这通常是最便捷的方法。CrossMap是一个功能强大的替代工具,支持多种文件格式和物种。自定义生成链文件适用于没有现成资源的情况,虽然复杂一些,但可以满足特定需求。Ensembl 和 Gramene提供的工具适用于支持的物种,尤其在植物基因组领域可能更具优势。选择合适的方法取决于你正在处理的物种、基因组版本以及现有的资源。

qq_40256654的博客 1853

web.xml中Listener的作用

的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,// 在整个web应用销毁之前调用,将所有应用空间所设置的内容清空。// 在整个web应用下面启动的时候做一些初始化的内容添加工作。// 供整个web应用的使用(获取数据库连接)// 通过这个事件可以获取整个应用的空间。// 应用监听器的初始化方法。// 应用监听器的销毁方法。...

m0_56162492的博客 1144

CMOS Sensor的调试经验分享

我这里要介绍的就是CMOS摄像头的一些调试经验。 首先,要认识CMOS摄像头的结构。我们通常拿到的是集成封装好的模组,一般由三个部分组成:镜头、感应器和图像信号处理器构成。一般情况下,集成好的模组我们只看到外面的镜头、接口和封装壳,这种一般是固定焦距的。有些厂商只提供芯片,需要自己安装镜头,镜头要选择合适大小的镜头,如果没有夜视要求的话,最好选择带有红外滤光的镜头,因为一般的sensor都...

camerall 3764

spring web.xml中 过滤器(Filter)的工作原理和代码

spring web.xml中 过滤器(Filter)的工作原理和代码

ttxs_10的博客 2643

YOLOv11【第二十章:模型迭代与生态闭环篇·第1节】在线增量学习——部署后新数据自动回流重训!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 432

从基础到前沿:深度剖析光束整形与扫描技术

光束扫描的核心在于通过特定手段改变光束的传播方向,从而实现对目标区域的扫描。在这个过程中,振镜、声光偏转器、电光偏转器等元件发挥着关键作用。振镜是一种常见的光束扫描元件,它主要由电机、反射镜和透镜组成。当电机驱动反射镜旋转时,根据光的反射定律,反射镜会改变入射光线的反射方向。假设初始时光束垂直入射到反射镜上,当反射镜绕某一轴旋转一定角度时,光束的反射方向就会相应改变,从而实现光束在空间中的扫描。在激光打标设备中,通过控制振镜的快速摆动,能够使激光束在工件表面快速移动,完成各种图案和文字的标记。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2098

web.xml详解(filter、Listener、servlet配置)

web.xmlweb.xml是什么?web工程加载web.xml过程web.xml文件元素详解1、schema 模式2、Web应用名称3、Web应用描述4、上下文参数5、过滤器6、监听器7、servlet8、会话超时配置9、欢迎文件页10、设置jsp web.xml是什么? web.xml是web项目的配置文件,一般的web工程中都会用到web.xml来配置,方便大型开发。 web.xml主要是来...

qq_42038565的博客 1073

基于STM32的录音机设计(STM32F103+VS1053B)

本项目设计并实现了一款基于STM32微控制器的便携式录音机。该录音机采用STM32F103C8T6作为主控芯片,结合VS1053B音频编解码模块、SD卡存储、OLED显示屏以及按键模块,提供了手动录音、自动录音和录音回放等多种功能。

1万+

web.xml 中的listener、 filter、servlet 加载顺序及其详解

网上查询了下web.xml中配置的加载优先级: 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加载 filter。最终得出的结论是:listener -> filter ->...

chuying1476的博客 164

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

tomcat 中 web.xml 中的listener、 filter、servlet 加载顺序及其详解

在项目中总会遇到一些关于加载的优先级问题,刚刚就遇到了一个问题,由于项目中使用了quartz任务调度,quartz在web.xml中是使用listener进行监听的,使得在tomcat启动的时候能马上检查数据库查看那些任务未被按时执行,而数据库的配置信息在是在web.xml中使用servlet配置的,导致tomcat启动后在执行quartz任务时报空指针,原因就是servlet中的数据库连接信息未...

u010325193的博客 4292

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 算法学习之——LRU最近最少使用
下一篇: 从MyBatis3.4.5中的PropertyNamer看属性名称定义
Jack_abu
博客等级 码龄10年 633粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack_abu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值