当前位置: 首页 > news >正文

javaweb--15

一、Filter(过滤器)

1. 核心概念

  • Filter 是 JavaWeb 三大组件(Servlet、Filter、Listener)之一
  • 可以拦截对资源的请求,实现通用操作:权限控制、统一编码处理、敏感字符处理等

2. 快速入门

步骤 1:定义 Filter 类,实现 Filter 接口

java

运行

public class FilterDemo implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // 初始化方法,服务器启动时执行一次 } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 放行前逻辑 System.out.println("Filter放行前逻辑..."); // 放行:执行后续过滤器/目标资源 chain.doFilter(request, response); // 放行后逻辑(响应返回时执行) System.out.println("Filter放行后逻辑..."); } @Override public void destroy() { // 销毁方法,服务器关闭时执行一次 } }
步骤 2:配置拦截路径(注解方式)

java

运行

@WebFilter("/*") // 拦截所有资源 public class FilterDemo implements Filter { // 同上代码 }

3. 执行流程

plaintext

执行放行前逻辑 → 放行 → 访问目标资源 → 执行放行后逻辑
  • 放行后访问资源完成后,会回到 Filter 中执行放行后逻辑,不会重头执行

4. 拦截路径配置

表格

配置方式示例说明
拦截具体资源/index.jsp仅访问指定资源时拦截
目录拦截/user/*拦截指定目录下的所有资源
后缀名拦截*.jsp拦截所有指定后缀的资源
拦截所有/*拦截所有请求资源

5. 过滤器链

  • 一个 Web 应用可配置多个过滤器,组成过滤器链
  • 执行顺序:按过滤器链顺序依次执行放行前逻辑 → 访问资源 → 逆序执行放行后逻辑
  • 注解配置的 Filter,优先级按类名字符串自然排序执行

6. 实战案例:登录验证 Filter

java

运行

@WebFilter("/*") public class LoginFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; // 1. 获取请求路径 String path = req.getServletPath(); // 2. 判断是否是登录相关资源(登录页、登录请求、验证码等),直接放行 if (path.contains("/login.jsp") || path.contains("/loginServlet") || path.contains("/checkCodeServlet")) { chain.doFilter(request, response); return; } // 3. 非登录资源,校验Session中是否有用户对象 HttpSession session = req.getSession(); Object user = session.getAttribute("user"); if (user != null) { // 已登录,放行 chain.doFilter(request, response); } else { // 未登录,重定向到登录页并提示 resp.sendRedirect(req.getContextPath() + "/login.jsp?error=1"); } } }

二、Listener(监听器)

1. 核心概念

  • Listener 是 JavaWeb 三大组件之一
  • 用于监听ServletContextHttpSessionServletRequest三个对象的创建、销毁,或对象中属性的增删改操作,自动执行对应代码

2. 8 种监听器分类

表格

监听对象监听器名称作用
ServletContextServletContextListener监听对象创建 / 销毁
ServletContextServletContextAttributeListener监听对象属性增删改
HttpSessionHttpSessionListener监听对象创建 / 销毁
HttpSessionHttpSessionAttributeListener监听对象属性增删改
HttpSessionHttpSessionBindingListener监听对象与 Session 的绑定 / 解除
HttpSessionHttpSessionActivationListener监听 Session 钝化 / 活化
ServletRequestServletRequestListener监听对象创建 / 销毁
ServletRequestServletRequestAttributeListener监听对象属性增删改

3. 快速入门:ServletContextListener

java

运行

@WebListener // 注解配置监听器 public class ContextLoaderListener implements ServletContextListener { // ServletContext创建时执行(Web应用发布成功) @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("Web应用启动,ServletContext初始化"); } // ServletContext销毁时执行(Web应用卸载/服务器关闭) @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("Web应用关闭,ServletContext销毁"); } }

三、Filter vs Listener 核心区别

表格

对比维度FilterListener
作用对象拦截请求 / 响应监听三大域对象的状态变化
触发时机请求到达资源前 / 响应返回时域对象创建 / 销毁、属性增删改时
典型应用登录校验、编码处理、敏感词过滤项目启动初始化、Session 会话监控
http://www.jsqmd.com/news/716888/

相关文章:

  • Python 并发编程:最佳实践与性能
  • 冷热电气多能互补的微能源网鲁棒优化调度(Matlab代码实现)
  • Layerdivider终极指南:如何3步将任何图片转换为专业PSD分层文件
  • RV1126双摄IMX577驱动移植避坑:从RK3588移植到DTS配置的完整流程
  • aihunjiian
  • 2026年3月全自动粘箱机生产厂家口碑推荐,半自动钉箱机/淘宝联动线/半自动粘箱机/双片钉箱机,全自动粘箱机工厂口碑分析 - 品牌推荐师
  • 超导量子电路原理与工程实践解析
  • SciTech-BigDataAIML-LLM系统: 一图看懂: MCP(模型控制平台)+LLM(大语言模型: 智能体)+Agents(特工: 执行体)+Skills(技能: 权能库)
  • 日语N1、N2、N3、N4、N5历年真题及答案解析PDF电子版(2010-2025年12月)
  • 最好用的数据库管理软件!数据库图形化管理工具!数据库管理工具Navicat Premium Lite安装包下载!
  • 2.4.2 本地模式运行Spark项目
  • 电钢琴核心技术与选购全攻略
  • AIGC工具平台-Grok账号管理Cli应用
  • LPDDR2 DMC寄存器架构与配置实战指南
  • Grafana仪表盘
  • 5分钟快速上手TradingView Lightweight Charts:打造高性能金融图表应用
  • 基于最小方差无畸变响应滤波器组的谱相关密度估计(Matlab代码实现)
  • Qt5.7.1项目里调用Windows自带语音合成,手把手教你用SAPI.SpVoice实现文本朗读
  • Kubernetes Pod启动耗时仅剩113ms,但函数首请求仍卡480ms?:Java Agent无侵入式类预加载技术首次开源解析
  • 云服务器部署Hermes Agent(爱马仕龙虾)的详细教程
  • 大模型Prompt-Tuning技术进阶 - 完整总结
  • 紧急预警:Spring Cloud Alibaba升级后低代码内核批量崩溃!:一份覆盖ClassLoader隔离、SPI重绑定、动态代理劫持的72小时应急修复手册
  • 基于Biham-Kocher已知明文攻击的ZIP密码恢复引擎架构解析
  • OpCore Simplify:3步搞定黑苹果EFI配置,告别繁琐手动设置
  • Modula-2语法规范与模块化编程实践指南
  • 工业级触控面板电脑ACP-1078核心技术解析与应用
  • Nanbeige 4.1-3B 开发环境配置:基于IDEA的模型调试与集成开发实战
  • OpCore-Simplify:三步快速创建黑苹果OpenCore EFI的智能自动化配置工具终极指南
  • 几块钱的磁铁 + 3D 打印机,给机器人造一层能感知触觉的“皮肤“
  • 别再傻傻分不清了!5分钟搞懂矩阵的Hadamard积和Kronecker积(附Python/Numpy代码示例)