博客
关于我
域对象的监听实现
阅读量: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学习总结(19)——Mysql无法创建外键的原因
    查看>>
    Mysql学习总结(19)——Mysql无法创建外键的原因
    查看>>
    Mysql学习总结(1)——常用sql语句汇总
    查看>>
    Mysql学习总结(20)——MySQL数据库优化的最佳实践
    查看>>
    Mysql学习总结(21)——MySQL数据库常见面试题
    查看>>
    Mysql学习总结(22)——Mysql数据库中制作千万级测试表
    查看>>
    Mysql学习总结(23)——MySQL统计函数和分组查询
    查看>>
    Mysql学习总结(24)——MySQL多表查询合并结果和内连接查询
    查看>>
    Mysql学习总结(25)——MySQL外连接查询
    查看>>
    Mysql学习总结(26)——MySQL子查询
    查看>>
    Mysql学习总结(27)——Mysql数据库字符串函数
    查看>>
    Mysql学习总结(28)——MySQL建表规范与常见问题
    查看>>
    Mysql学习总结(29)——MySQL中CHAR和VARCHAR
    查看>>
    Mysql学习总结(2)——Mysql超详细Window安装教程
    查看>>
    Mysql学习总结(30)——MySQL 索引详解大全
    查看>>
    Mysql学习总结(31)——MySql使用建议,尽量避免这些问题
    查看>>
    Mysql学习总结(32)——MySQL分页技术详解
    查看>>
    Mysql学习总结(33)——阿里云centos配置MySQL主从复制
    查看>>
    Mysql学习总结(35)——Mysql两千万数据优化及迁移
    查看>>
    Mysql学习总结(36)——Mysql查询优化
    查看>>