Filter和Listener笔记

本文深入解析了Web应用中的过滤器(Filter)与监听器(Listener)的概念、作用及配置方式,包括过滤器的执行流程、生命周期以及过滤器链的配置,同时介绍了监听器在事件监听机制中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要内容

  1. Filter :过滤器
  2. Listener :监听器

Filter :过滤器

  1. 概念

    • web中的过滤器 :访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
    • 过滤器的作用 :一般用于通用的操作;如登陆验证,统一编码处理,敏感字符过滤…
  2. 快速入门

    1. 创建一个类,实现接口Filter;是javax.servlet下的Filter
    2. 复写方法
      1. 在方法中需要放行
    3. 配置拦截路径
      1. web.xml配置
      2. 注解配置 @WebFilter("/*")
  3. 过滤器细节

    1. web.xml配置
            <filter>
                <filter-name>demo1</filter-name>
                <filter-class>com.web.FilterDemo1</filter-class>
            </filter>
            <filter-mapping>
                <filter-name>demo1</filter-name>
                <!--  拦截路径      -->
                <url-pattern>/*</url-pattern>
            </filter-mapping>
  1. 过滤器执行流程
    - 放行之前
    - 是对request对象的请求消息进行增强
    - 放行之后
    - 是对response对象的响应消息进行增强
    - 响应回来后是在放行后开始执行
    3. 过滤器的生命周期
    - init :服务器启动后,会创建Filter对象;此时执行此方法;只执行一次,一般用于加载资源
    - doFilter :每一次请求被拦截时,会执行该方法;可以执行多次
    - destroy :服务器关闭时,会销毁Filter对象。若服务器是正常关闭,则会执行此方法,只执行一次;一般用于释放资源
    4. 过滤器配置详解
    - 拦截路径的配置
    1. 具体资源路径 :/index.jsp 只有访问index.jsp资源时,过滤器才会被执行
    2. 拦截目录 : /user/* 访问/user下的所有资源时,过滤器都会被执行
    3. 后缀名拦截 : .jsp 访问所有后缀名为jsp的资源时,过滤器会被执行
    4. 拦截所有资源 : /
    访问所有资源,锅炉其都会被执行
    - 拦截方式的配置
    - 注解配置
    * 设置dispatcherTypes属性
    1. REQUEST: 默认值;浏览器直接请求资源
    2. FORWARD: 转发访问资源
    3. INCLUDE: 包含访问资源
    4. ERROR: 错误跳转资源
    5. ASYNC: 异步访问资源
    - web.xml配置
    * 设置标签即可
    5. 过滤器链(配置多个过滤器)
    * 执行顺序 若有两个过滤器,过滤器1和过滤器2
    * 则执行顺序为
    * 过滤器1 – 过滤器2 – 资源 – 过滤器2 – 过滤器1
    * 过滤器的先后顺序问题
    1. 注解配置
    按照类名的字符串比较规则进行比较,值小的先执行
    如: Afilter 和 Bfilter,则Afilter先执行
    2. web.xml配置
    按照定义的顺序执行,谁定义在前面,谁先执行

基于Filter的两个小案例

Listener :监听器

  • 概念 :web的三大组件之一

    • 事件监听机制
      • 事件 :一件事情
      • 事件源 :事件发生的地方
      • 监听器 :一个对象
      • 注册监听 :将事件,事件源,监听器绑定在一起;但事件源上发生事件时,运行监听器代码
  • ServletContextListener :监听ServletContext对象的创建与销毁

    • 方法
      • void contextDestroyed(ServletContextEvent sce) :ServletContext对象被销毁前会调用此方法
      • void contextInitialized(ServletContextEvent sce) :ServletContext对象被创建后会调用此方法
    • 步骤
      1. 定义一个类,实现ServletContextListener接口
      2. 复写方法
      3. 配置
        1. web.xml配置
          <!-- 配置监听器 -->
          <listener>
          <listener-class>com.web.listener.ContextLoaderListener</listener-class>
          </listener>
          <!-- 指定初始化参数 -->
          <context-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
          </context-param>

        2. 注解配置
          @WebListener

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值