Salmon的全栈知识 Salmon的全栈知识
首页
  • JavaSE
  • JavaWeb
  • Spring生态
  • JUC
  • JVM
  • Netty
  • Java各版本特性
  • 23种设计模式
  • Maven
  • Java常用框架
  • Dubbo
  • OpenFeign
  • Nacos
  • Zookeeper
  • Sentinel
  • Seata
  • SpringCloud Gateway
  • Apollo
  • Eureka
  • Go基础
  • Gin
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
    • ElasticSearch
  • 消息中间件

    • RabbitMQ
    • RocketMQ
    • Kafka
    • ActiveMQ
    • MQTT
    • NATS
  • 网关中间件

    • Nginx
  • Linux
  • Docker
  • Git
  • K8s
  • Solidity
  • Java
  • 计算机网络
  • 操作系统
GitHub (opens new window)
首页
  • JavaSE
  • JavaWeb
  • Spring生态
  • JUC
  • JVM
  • Netty
  • Java各版本特性
  • 23种设计模式
  • Maven
  • Java常用框架
  • Dubbo
  • OpenFeign
  • Nacos
  • Zookeeper
  • Sentinel
  • Seata
  • SpringCloud Gateway
  • Apollo
  • Eureka
  • Go基础
  • Gin
  • SQL数据库

    • MySQL
    • Oracle
  • NoSQL数据库

    • Redis
    • MongoDB
    • ElasticSearch
  • 消息中间件

    • RabbitMQ
    • RocketMQ
    • Kafka
    • ActiveMQ
    • MQTT
    • NATS
  • 网关中间件

    • Nginx
  • Linux
  • Docker
  • Git
  • K8s
  • Solidity
  • Java
  • 计算机网络
  • 操作系统
GitHub (opens new window)
npm

(进入注册为作者充电)

  • JUnit单元测试
  • JDBC
  • JDBC连接池&JDBCTemplate
  • XML
  • Tomcat&Servlet
  • Servlet&HTTP&Request
  • Response
  • Cookie&Session
  • EL&JSTL
  • Filter&Listener
    • Filter:过滤器
      • 1. 概念
      • 2. 快速入门
      • 步骤:
      • 示例代码:
      • 3. 过滤器细节
      • web.xml 配置
      • 执行流程:
      • 生命周期方法:
      • 拦截路径配置说明:
      • 拦截方式 dispatcherTypes(注解配置)
      • web.xml 配置拦截方式
      • 多个过滤器执行顺序(过滤器链):
      • 4. 案例
      • 案例1:登录验证
      • 案例2:敏感词汇过滤
      • 分析:
      • 涉及设计模式:
      • 装饰模式 / 代理模式
      • 动态代理步骤:
    • Listener:监听器
      • 概念
      • ServletContextListener
      • 方法:
      • 开发步骤:
      • 方法1:web.xml 配置
      • 方法2:注解方式
  • 《JavaWeb》笔记
Salmon
2025-07-21
目录

Filter&Listener

# Filter:过滤器

# 1. 概念

  • 生活中的过滤器:净水器、空气净化器、土匪……
  • Web 中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
  • 过滤器的作用:一般用于完成通用的操作,如:登录验证、统一编码处理、敏感字符过滤等。

# 2. 快速入门

# 步骤:

  1. 定义一个类,实现接口 Filter
  2. 复写方法
  3. 配置拦截路径
    • 使用 web.xml
    • 或使用注解

# 示例代码:

@WebFilter("/*") // 访问所有资源之前,都会执行该过滤器
public class FilterDemo1 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
                         FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filterDemo1被执行了....");
        // 放行
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
    }
}

# 3. 过滤器细节

# web.xml 配置

<filter>
    <filter-name>demo1</filter-name>
    <filter-class>cn.itcast.web.filter.FilterDemo1</filter-class>
</filter>
<filter-mapping>
    <filter-name>demo1</filter-name>
    \<url-pattern\>/*\</url-pattern\>
</filter-mapping>

# 执行流程:

  1. 执行过滤器
  2. 执行放行后的资源
  3. 回来执行放行后下方的过滤器代码

# 生命周期方法:

  • init():服务器启动后执行一次
  • doFilter():每次请求都会执行
  • destroy():服务器正常关闭时执行一次

# 拦截路径配置说明:

  • /index.jsp:拦截具体资源
  • /user/*:拦截某个目录下所有资源
  • *.jsp:拦截所有 .jsp 资源
  • /*:拦截所有资源

# 拦截方式 dispatcherTypes(注解配置)

  • REQUEST:默认,浏览器直接请求资源
  • FORWARD:转发访问资源
  • INCLUDE:包含访问资源
  • ERROR:错误跳转资源
  • ASYNC:异步访问资源

# web.xml 配置拦截方式

<dispatcher>FORWARD</dispatcher>

# 多个过滤器执行顺序(过滤器链):

执行顺序:

  1. 过滤器1
  2. 过滤器2
  3. 资源执行
  4. 返回过滤器2
  5. 返回过滤器1

先后顺序:

  • 注解:按类名字符串字典序排序
  • web.xml:谁定义在上面,谁先执行

# 4. 案例

# 案例1:登录验证

  • 访问资源前,判断是否登录:

    • 登录了 → 放行
    • 未登录 → 跳转到登录页面,提示:您尚未登录,请先登录

# 案例2:敏感词汇过滤

  • 对输入数据做敏感词过滤
  • 敏感词来自《敏感词汇.txt》
  • 替换为 ***
# 分析:
  • 对 request 对象增强,拦截参数获取方法
# 涉及设计模式:
# 装饰模式 / 代理模式

代理模式概念:

  • 真实对象:被代理的对象
  • 代理对象:增强后的对象

实现方式:

  • 静态代理:代码中写代理类
  • 动态代理:运行时生成代理类
# 动态代理步骤:
  1. 代理类和真实类实现同一接口
  2. 使用 Proxy.newProxyInstance() 创建代理对象
  3. 使用代理对象调用方法
  4. 在方法中增强逻辑

增强方式:

  • 增强参数
  • 增强返回值
  • 增强方法体逻辑

# Listener:监听器

# 概念

Web 三大组件之一

基于 事件监听机制

  • 事件:一件事
  • 事件源:事件发生的位置
  • 监听器:对事件作出响应的对象
  • 注册监听:事件 + 源 + 监听器绑定,当事件源上事件发生时触发监听器代码

# ServletContextListener

监听 ServletContext 对象的 创建与销毁

# 方法:

void contextInitialized(ServletContextEvent sce) // 创建后执行
void contextDestroyed(ServletContextEvent sce)   // 销毁前执行

# 开发步骤:

  1. 定义一个类,实现 ServletContextListener 接口
  2. 复写两个方法
  3. 配置监听器
# 方法1:web.xml 配置
<listener>
    <listener-class>cn.itcast.web.listener.ContextLoaderListener</listener-class>
</listener>
  • 可结合 <context-param> 指定初始化参数
# 方法2:注解方式
@WebListener
public class MyListener implements ServletContextListener {
    ...
}
上次更新: 2025/07/23, 01:37:33
EL&JSTL

← EL&JSTL

Theme by Vdoing | Copyright © 2022-2025 Salmon's Blog
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式