• Listener 监听器


    Servlet API提供了一系列的事件和事件监听接口,这里监听的所有事件都继承自 java.util.Event 对象

    监听器接口根据作用范围可分为三类:application范围(ServletContext)、session范围(HttpSession)、request范围(ServletRequest)

    监听器接口主要在 javax.servlet 和 javax.servlet.http 的包中

    javax.servlet.ServletContextListener  // 能够相应 ServletContext 声明周期事件。提供了 ServletContext 创建之后和 ServletContext 关闭之前的会被调用的方法。
    javax.servlet.ServletContextAttributeListener  // 能够相应 ServletContext 范围的属性添加、删除、替换事件
    javax.servlet.http.HttpSessionListener // 能够相应 HttpSession 的创建、超时、失效事件 javax.servlet.http.HttpSessionAttributeListener // 能够响应 HttpSession 范围的属性添加、删除、替换事件 javax.servlet.http.HttpSessionActivationListener // 在一个 HttpSession 激活或失效时被调用 javax.servlet.http.HttpSessionBindingListener // javax.servlet.ServletRequestListener // 能够相应一个 ServletRequest 的创建或删除 javax.servlet.ServletRequestAttributeListener // 能够相应 ServletRequest 范围的属性值添加、删除、修改事件 javax.servlet.AsyncListener // 一个用于异步操作的监听器

    编写一个监听器,只需要编写一个Java类来实现对应的监听器接口,然后注册该监听器就可以了

    一个应用中可以添加多个监听器,它们是同步工作的。

    使用部署描述符(web.xml)进行注册

    <listener>
      <listener-class>监听器的全限定名</listener-class>
    </listener>

    使用 WebListener 注解进行注册

    @WebListener
    public class ListenerClass implements Listenerinterface {
      ...
    }

    ServletContext 监听器 application范围

    该类监听器包含两个接口:ServletContextListener、ServletContextAttributeListener

    ServletContextListener能够对ServletContext的创建和销毁作出相应。其包含两个方法

    default void contextInitialized(ServletContextEvent sce)  // 当ServletContext初始化时,容器调用该方法
    default void contextDestroyed(ServletContextEvent sce)    // 当ServletContext将要销毁时,容器调用该方法

    这两个方法都会从容器获取一个ServletContextEvent对象,该对象只有一个方法getServeltContext()方法

    public class ServletContextEvent extends java.util.EventObject
    package app08a.listener;
    
    import java.util.HashMap;
    import java.util.Map;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.annotation.WebListener;
    
    @WebListener
    public class AppListener implements ServletContextListener {  // 监听器,
        
        @Override
        public void contextDestroyed(ServletContextEvent sce) {    }
        
        @Override
        public void contextInitialized(ServletContextEvent sce) {  // 容器会在ServeltContext初始化时调用该方法
            ServletContext servletContext = sce.getServletContext();
            Map<String, String> countries = new HashMap<>();
            countries.put("ca", "Canada");
            countries.put("us", "United States");
            servletContext.setAttribute("countries", countries);
        }
    }
    <!-- countries.jsp -->
    
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>countries</title>
    </head>
    <body>
        We operate in these countries:
        <ul>
            <c:forEach items="${countries }" var="country">  <!-- 使用JSTL标签 -->
                <li>${country.value }</li>
            </c:forEach>
        </ul>
    </body>
    </html>

    当一个 ServletContext 范围的属性被添加、删除、替换时,ServletContextAttributeListener接口的实现类会接受到消息。

    该接口有三个方法

    default void attributeAdded(ServletContextAttributeEvent scae)  // 在一个ServletContext范围属性被添加时被容器调用
    default void attributeRemoved(ServletContextAttributeEvent scae)  // 在一个ServletContext范围属性被删除时被容器调用 
    default void attributeReplaced(ServletContextAttributeEvent scae)  // 在一个ServletContext范围属性被替换时被容器调用

    HttpSession 监听器 session范围

     该类监听器有四个接口,都在 javax.servlet.http 包中

    HttpSessionListener            // 当一个HttpSession 创建或销毁时,容器会通知所有的HttpSessionListener监听器
    HttpSessionAttributeListener   // 响应 HttpSession 范围属性的添加、删除、替换
    HttpSessionActivationListener  // 在分布式环境下,会用多个容器来进行负载均衡,有可能需要将session保存起来,在容器间进行传递。
                                   // 例如当一个容器内存不足时,会把很少用到的对象转存到其他容器中,此时容器就会通知所有HttpSessionActionListener接口的实现类。
    HttpSessionBindingListener // 当有属性绑定或解绑到HttpSession上时,容器就会调用该监听器。

     HttpSessionListener 监听器 该监听器有两个方法

    default void sessionCreated(HttpSessionEvent se)  //
    default void sessionDestroyed(HttpSessionEvent se)  //

    HttpSessionAttributeListener 监听器 该监听器有三个方法

    default void attributeAdded(HttpSessionBindingEvent se)  //
    default void attributeRemoved(HttpSessionBindingEvent se)  //
    default void attributeReplaced(HttpSessionBindingEvent se)  //

    HttpSessionActivationListener 监听器 该监听器有两个方法

    default void sessionDidActivate(HttpSessionEvent se)  // 当 HttpSession 被转移到其他容器之后,容器调用该方法
    default void sessionWillPassivate(HttpSessionEvent se)  // 当一个HttpSession 将要失效时,容器会调用该方法。

    HttpSessionBindingListener 监听器 该监听器有两个方法

    default void valueBound(HttpSessionBindingEvent event)  //
    default void valueUnbound(HttpSessionBindingEvent event)  //  

    ServletRequest 监听器request范围

     该类监听器有三个接口

    ServletRequestListener           // 对ServletRequest的创建和销毁进行响应。容器会通过一个池来存放并重复利用多个ServletRequest,
    // ServletRequest的创建是从容器池里被分配出来的时刻开始,而销毁的时刻是放回容器池里的时间。
    ServletRequestAttributeListener // 当一个ServletRequest范围的属性被添加、删除、替换时,该监听器会被调用。 AsyncListener //

     ServletRequestListener监听器,该监听器有两个方法

    default void requestInitialized(ServletRequestEvent sre)  // 当一个ServletRequest创建(从容器池里取出)时,容器调用该方法
    default void requestDestroyed(ServletRequestEvent sre)    // 当ServletRequest销毁(被容器回收)时,容器调用该方法

    ServletRequestAttributeListener 监听器,该监听器有三个方法

    default void attributeAdded(ServletRequestAttributeEvent srae)    //
    default void attributeRemoved(ServletRequestAttributeEvent srae)  //
    default void attributeReplaced(ServletRequestAttributeEvent srae) //
  • 相关阅读:
    cout的输出格式初探
    CVPR 2015 papers
    C语言的32个保留字
    读取siftgeo格式文件的matlab程序
    (转)各类排序算法总结
    被除数、除数、商、余数的正负号规律二
    被除数、除数、商、余数的正负号规律一
    FCKEditor上传图片word
    CKEditor上传图片word
    在线编辑器上传图片word
  • 原文地址:https://www.cnblogs.com/0820LL/p/9904323.html
Copyright © 2020-2023  润新知