博客
关于我
域对象的监听实现
阅读量: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/

    你可能感兴趣的文章
    Mysql8在Windows上离线安装时忘记root密码
    查看>>
    MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
    查看>>
    mysql8的安装与卸载
    查看>>
    MySQL8,体验不一样的安装方式!
    查看>>
    MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
    查看>>
    Mysql: 对换(替换)两条记录的同一个字段值
    查看>>
    mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
    查看>>
    MYSQL:基础——3N范式的表结构设计
    查看>>
    MYSQL:基础——触发器
    查看>>
    Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
    查看>>
    mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
    查看>>
    mysqldump 参数--lock-tables浅析
    查看>>
    mysqldump 导出中文乱码
    查看>>
    mysqldump 导出数据库中每张表的前n条
    查看>>
    mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
    查看>>
    Mysqldump参数大全(参数来源于mysql5.5.19源码)
    查看>>
    mysqldump备份时忽略某些表
    查看>>
    mysqldump实现数据备份及灾难恢复
    查看>>
    mysqldump数据库备份无法进行操作只能查询 --single-transaction
    查看>>
    mysqldump的一些用法
    查看>>