JavaWeb——监听器

本文介绍了JavaWeb中如何通过监听器监控ServletContext、HttpSession和HttpServletRequest的生命周期以及属性变化,包括监听器接口的实现、注册方式(注解和XML配置)、以及相关方法如requestInitialized、sessionCreated等在不同场景下的触发情况。

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

  • 在JavaWeb中,监视servlet的三个作用域的程序,就是Javaweb中的监听器.在Javaweb中的servlet作用域对象:ServletContext/HttpSession/HttpServletRequest(应用监听器/会话监听器/请求监听器)三个对象.而这三个对象的监视:三个对象的生命周期和属性的变化.
    • 在应用(Tomcat)/会话/请求创建/销毁时被触发,
  • 分类
    • 按生命周期
      • ServletContextLinstener
        • 监听ServletContext生命周期
      • HttpSessionLinstener
        • 监听HttpSession生命周期
      • ServletRequstLinstener
        • 监听每个HttpServletRequest对象的生命周期
    • 按属性变化
      • ServletContextAttributeLinstener
        • 监听ServletContext属性变化
      • HttpSessionAttributeLinstener
        • 监听HttpSession属性变化
      • ServletRequestAttributeLinstener
        • 监听HeepServletRequest属性变化
    • 按职能
      • 生命周期监听
      • 属性监听
  • 使用
    • 实现接口,将类注册到服务器(注解/配置文件),服务器会自动调用相关方法
    • 实现接口
    • 注册到服务器
      • 注解
        • @WebListener
@WebListener
public class MyRequestLinstener implements ServletRequestListener, ServletRequestAttributeListener {
    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("请求被创建");
    }
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("请求被销毁");
    }
    @Override
    public void attributeAdded(ServletRequestAttributeEvent srae) {
        System.out.println("添加属性");
    }
    @Override
    public void attributeReplaced(ServletRequestAttributeEvent srae) {
    }

    @Override
    public void attributeRemoved(ServletRequestAttributeEvent srae) {
        System.out.println("移除属性");
    }
}
      • XML配置
<web-app><listener>
    <listener-class>com.wry.javaweb.linstener.MyRequestLinstener</listener-class>
  </listener>
</web-app>

Request域监听器

  • ServletRequestLinstrener接口 请求生命周期监听器
    • requestInitialized()
      • 请求被创建时调用
    • requestDestroyed()
      • 请求被销毁时调用
  • ServletRequestAttributeLinstener接口 请求属性(数据)监听器
    • attributeAdded()
      • setAttribute()添加属性
      • 添加属性且属性不存在时调用
    • attributeReplaced()
      • setAttribute()添加属性
      • 属性被覆盖时调用
        • 添加属性时属性已存在
    • attributeRemoveed()
      • 属性被移除时调用
        • removeAttribute()被调用时调用

Session监听器

  • HttpSessionLinstener接口 会话生命周期监听器
    • sessionCreated()
      • 会话创建时
        • 在用户请求进入Tomcat后,访问JSP/调用request.getSession方法时,如果没有会话对象则创建会话对象,同时触发这个方法
          • JSP页面编译后的Java类会自动调用request.getSession方法
    • sessionDestroyed()
      • 会话销毁时触发
        • 会话的3个销毁时机
          • 关闭Tomcat时
          • 会话超时时
            • 默认保存时间为30分钟,如果30分钟内没有访问过JSP或没有调用过request.getSession方法,会话就会自动销毁,否则会重新计时
          • 手动调用销毁方法
            • Session实例对象.invalidate()
              • 销毁Session对象
  • HttpSessionAttributeListener接口 会话属性(数据)监听器
    • attributeListenerAdded()
      • 向会话中添加数据
    • attributeReplaced()
      • 覆盖会话中数据
    • attributeRemoved()
      • 移出会话中数据
  • HttpSessionBindingListener接口
  • HttpSessionActivationListener接口

ServletContext监听器

  • ServletContextLinstener接口 应用生命周期监听器
    • contextInitialized()
      • 服务器启动时触发,通常用于初始化一些数据
    • contextDestroyed()
      • 服务器关闭时触发,通常用于销毁一些资源
  • ServletContextAttributeLinstener接口 应用属性(数据)监听器
    • attributeListenerAdded()
      • 向应用对象中添加数据
    • attributeReplaced()
      • 覆盖应用对象中数据
    • attributeRemoved()
      • 移出应用对象中数据
    • 注意
      • 可以通过request.getContext()方法获取应用对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值