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

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

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/

    你可能感兴趣的文章
    Objective-C实现Euclidean GCD欧几里得最大公约数算法(附完整源码)
    查看>>
    Objective-C实现euclideanDistance欧氏距离算法(附完整源码)
    查看>>
    Objective-C实现euler method欧拉法算法(附完整源码)
    查看>>
    Objective-C实现euler modified变形欧拉法算法(附完整源码)
    查看>>
    Objective-C实现eulerianPath欧拉路径算法(附完整源码)
    查看>>
    Objective-C实现Eulers TotientFunction欧拉函数算法(附完整源码)
    查看>>
    Objective-C实现eulers totient欧拉方程算法(附完整源码)
    查看>>
    Objective-C实现EulersTotient欧拉方程算法(附完整源码)
    查看>>
    Objective-C实现eval函数功能(附完整源码)
    查看>>
    Objective-C实现even_tree偶数树算法(附完整源码)
    查看>>
    Objective-C实现Exceeding words超词(差距是ascii码的距离) 算法(附完整源码)
    查看>>
    Objective-C实现exchange sort交换排序算法(附完整源码)
    查看>>
    Objective-C实现ExponentialSearch指数搜索算法(附完整源码)
    查看>>
    Objective-C实现extended euclidean algorithm扩展欧几里得算法(附完整源码)
    查看>>
    Objective-C实现ExtendedEuclidean扩展欧几里德GCD算法(附完整源码)
    查看>>
    Objective-C实现external sort外排序算法(附完整源码)
    查看>>
    Objective-C实现Factorial digit sum阶乘数字和算法(附完整源码)
    查看>>
    Objective-C实现factorial iterative阶乘迭代算法(附完整源码)
    查看>>
    Objective-C实现factorial recursive阶乘递归算法(附完整源码)
    查看>>
    Objective-C实现factorial阶乘算法(附完整源码)
    查看>>