博客
关于我
域对象的监听实现
阅读量: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中having的用法
    查看>>
    MySQL中interactive_timeout和wait_timeout的区别
    查看>>
    mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中json_extract的使用方法
    查看>>
    mysql中kill掉所有锁表的进程
    查看>>
    mysql中like % %模糊查询
    查看>>
    MySql中mvcc学习记录
    查看>>
    mysql中null和空字符串的区别与问题!
    查看>>
    MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
    查看>>
    MYSQL中TINYINT的取值范围
    查看>>
    MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
    查看>>
    Mysql中varchar类型数字排序不对踩坑记录
    查看>>
    MySQL中一条SQL语句到底是如何执行的呢?
    查看>>
    MySQL中你必须知道的10件事,1.5万字!
    查看>>
    MySQL中使用IN()查询到底走不走索引?
    查看>>
    Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
    查看>>
    MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
    查看>>
    mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
    查看>>
    mysql中出现Unit mysql.service could not be found 的解决方法
    查看>>