博客
关于我
域对象的监听实现
阅读量:775 次
发布时间:2019-03-24

本文共 5653 字,大约阅读时间需要 18 分钟。

Java Web 应用程序中的三大域对象及监听器实现

在 Java Web 开发中,ServletContext、HttpSession 和 HttpServletRequest 是应用程序中非常重要的域对象。这些对象的创建、修改、删除以及生命周期中的事件变化可以通过监听器来跟踪和处理。以下是关于如何实现对这三个对象属性的监听以及事件监听的详细介绍。


一、关于三者属性的监听实现

在 web.xml 中配置需要实现的监听器类。

  • ServletContext 属性的监听

    • 实现接口 ServletContextAttributeListener,该接口含有三个方法,分别对应 ServletContext 属性的创建、修改和删除时会调用的方法。
    • 实现 ServletContextListener 接口是对 ServletContext 类所代表的整个应用程序生命周期的监听,包括应用程序启动和停止时的事件。
  • HttpSession 属性的监听

    • 实现接口 HttpSessionAttributeListener,它对应于 session 对象属性的创建、修改和删除时的事件。
    • 实现 HttpSessionListener 接口是对 session 对象的生命周期(创建和销毁)进行监听,可以进行 session 的最大空闲时间管理。
  • HttpServletRequest 属性的监听

    • 实现接口 ServletRequestAttributeListener,对应于 request 对象属性的创建、修改和删除时的事件。
    • 实现 ServletRequestListener 接口是对 request 对象的生命周期(创建和销毁)进行监听,通常用来管理请求范围。

  • 二、关于三者事件的监听实现

  • ServletContext 的事件监听

    • 实现 ServletContextListener 接口,主要含有两个方法:
      • contextInitialized:当应用程序启动时触发。
      • contextDestroyed:当应用程序关闭时触发。
    • 通常在 ServletContextListener 的实现类中,可以用于做一些全局初始化和清理的工作,比如加载常量、初始化外观等。
  • HttpSession 的事件监听

    • 实现 HttpSessionListener 接口,主要含有两个方法:
      • sessionCreated:当 session 对象创建时触发。
      • sessionDestroyed:当 session 对象销毁时触发。
    • sessionDestroyed 方法中,一般会调用 session.setMaxInactiveInterval(5) 来指定 session 的最大空闲时间,或者调用 session.invalidate() 来注销 session。
  • HttpServletRequest 的事件监听

    • 实现 ServletRequestListener 接口,主要含有两个方法:
      • requestInitialized:当请求进入应用程序时触发。
      • requestDestroyed:当请求离开应用程序时触发。
    • 这些方法可以用于对每个请求的生命周期进行跟踪,比如记录请求开始和结束的时间,或者进行一些请求级的缓存管理。

  • 三、技术实现实例

    以下是一个实现细节的示例:

    package com.listener;import javax.servlet.ServletContextAttributeEvent;import javax.servlet.ServletContextAttributeListener;import javax.servlet.ServletRequestAttributeEvent;import javax.servlet.ServletRequestAttributeListener;import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;public class MyServletContextAttributeListener implements     ServletContextAttributeListener, HttpSessionAttributeListener, ServletRequestAttributeListener {    // ServletContext 属性的监听    public void attributeAdded(ServletContextAttributeEvent arg0) {        System.out.println("application 创建时");    }    public void attributeRemoved(ServletContextAttributeEvent arg0) {        System.out.println("application 删除时");    }    public void attributeReplaced(ServletContextAttributeEvent arg0) {        System.out.println("application 替换时");    }    // HttpSession 属性的监听    public void attributeAdded(HttpSessionBindingEvent arg0) {        System.out.println("session 创建时");    }    public void attributeRemoved(HttpSessionBindingEvent arg0) {        System.out.println("session 删除时");    }    public void attributeReplaced(HttpSessionBindingEvent arg0) {        System.out.println("session 替换时");    }    // HttpServletRequest 属性的监听    public void attributeAdded(ServletRequestAttributeEvent arg0) {        System.out.println("request 创建时");    }    public void attributeRemoved(ServletRequestAttributeEvent arg0) {        System.out.println("request 删除时");    }    public void attributeReplaced(ServletRequestAttributeEvent arg0) {        System.out.println("request 替换时");    }}
    package com.listener;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class MyServletContextListener implements ServletContextListener {    public void contextDestroyed(ServletContextEvent arg0) {        System.out.println("application:::ServletContext 注销时 加载");    }    public void contextInitialized(ServletContextEvent arg0) {        System.out.println("application:::ServletContext 初始化时 加载");    }}

    四、你的技术文章优化建议

  • 保持技术文章的连贯性,避免使用生硬的首尾分布结构。
  • 使用简洁的标题和子标题来划分内容,如使用 h1、h2 标签,但请确保这些标签适合 SE(tmp)O 优化。
  • 保留核心代码示例,但整齐地用代码块标注,便于阅读和复制。
  • 在技术术语使用上尽量精准,但语言表达要可读,避免过于学术化。
  • 增加实际案例的讲解,使读者更容易理解各个监听器的应用场景。
  • 以下是优化后的基于 SE(tmp)O 的技术内容:


    Java Web 应用程序中的三大域对象及监听器实现

    在 Java Web 开发中,ServletContext、HttpSession 和 HttpServletRequest 是应用程序中非常重要的域对象。这些对象的创建、修改、删除以及生命周期中的事件变化可以通过监听器来跟踪和处理。本文将详细介绍如何实现对这三个对象属性的监听以及事件监听。

    ServletContext 属性监听

    ServletContext 属性的监听可以通过实现 ServletContextAttributeListener 接口来实现。该接口包含以下三个方法:

  • attributeAdded(ServletContextAttributeEvent arg0):当 ServletContext 属性被创建时触发。
  • attributeRemoved(ServletContextAttributeEvent arg0):当 ServletContext 属性被删除时触发。
  • attributeReplaced(ServletContextAttributeEvent arg0):当 ServletContext 属性被替换时触发。
  • HttpSession 属性监听

    HttpSession 属性的监听可以通过实现 HttpSessionAttributeListener 接口来实现。该接口包含以下三个方法:

  • attributeAdded(HttpSessionBindingEvent arg0):当 HttpSession 属性被创建时触发。
  • attributeRemoved(HttpSessionBindingEvent arg0):当 HttpSession 属性被删除时触发。
  • attributeReplaced(HttpSessionBindingEvent arg0):当 HttpSession 属性被替换时触发。
  • HttpServletRequest 属性监听

    HttpServletRequest 属性的监听可以通过实现 ServletRequestAttributeListener 接口来实现。该接口包含以下三个方法:

  • attributeAdded(ServletRequestAttributeEvent arg0):当 HttpServletRequest 属性被创建时触发。
  • attributeRemoved(ServletRequestAttributeEvent arg0):当 HttpServletRequest 属性被删除时触发。
  • attributeReplaced(ServletRequestAttributeEvent arg0):当 HttpServletRequest 属性被替换时触发。

  • 事件监听器的实现

    除了属性监听器之外,还有一些特殊的事件监听器可以用来监听 ServletContext、HttpSession 和 HttpServletRequest 的生命周期事件。

    ServletContext 的生命周期监听

    可以通过实现 ServletContextListener 接口来监听 ServletContext 的生命周期事件。该接口包含以下两个方法:

  • contextInitialized(ServletContextEvent arg0):当 ServletContext 被初始化时触发。
  • contextDestroyed(ServletContextEvent arg0):当 ServletContext 被销毁时触发。
  • HttpSession 的生命周期监听

    可以通过实现 HttpSessionListener 接口来监听 HttpSession 的生命周期事件。该接口包含以下两个方法:

  • sessionCreated(HttpSessionEvent arg0):当 HttpSession 被创建时触发。
  • sessionDestroyed(HttpSessionEvent arg0):当 HttpSession 被销毁时触发。
  • HttpServletRequest 的生命周期监听

    可以通过实现 ServletRequestListener 接口来监听 HttpServletRequest 的生命周期事件。该接口包含以下两个方法:

  • requestInitialized(ServletRequestEvent arg0):当 HttpServletRequest 被初始化时触发。
  • requestDestroyed(ServletRequestEvent arg0):当 HttpServletRequest 被销毁时触发。

  • 记录你的优化内容

    请注意,不要将任何内容复制粘贴到最终答案中,而是根据上述优化建议重新组织和编写相关内容。

    转载地址:http://rylkk.baihongyu.com/

    你可能感兴趣的文章
    MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>
    MySQL万字总结!超详细!
    查看>>
    Mysql下载以及安装(新手入门,超详细)
    查看>>
    MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
    查看>>
    MySQL不同字符集及排序规则详解:业务场景下的最佳选
    查看>>
    Mysql不同官方版本对比
    查看>>
    MySQL与Informix数据库中的同义表创建:深入解析与比较
    查看>>
    mysql与mem_细说 MySQL 之 MEM_ROOT
    查看>>
    MySQL与Oracle的数据迁移注意事项,另附转换工具链接
    查看>>
    mysql丢失更新问题
    查看>>
    MySQL两千万数据优化&迁移
    查看>>
    MySql中 delimiter 详解
    查看>>
    MYSQL中 find_in_set() 函数用法详解
    查看>>
    MySQL中auto_increment有什么作用?(IT枫斗者)
    查看>>
    MySQL中B+Tree索引原理
    查看>>
    mysql中cast() 和convert()的用法讲解
    查看>>
    mysql中datetime与timestamp类型有什么区别
    查看>>
    MySQL中DQL语言的执行顺序
    查看>>
    mysql中floor函数的作用是什么?
    查看>>
    MySQL中group by 与 order by 一起使用排序问题
    查看>>