监听器-Listener

news2024/11/19 2:26:55

Servlet规范中的监听器-Listener

  • 观察者设计模式, 所有的监听器都是观察者设计模式的体现。

  • 什么是观察者设计模式呢?

    • 它是事件驱动的一种体现形式。就好比在做什么事情的时候被人盯着。当对应做到某件事时,触发事件。

  • 观察者模式通常由以下三部分组成:

    • 事件源:触发事件的对象。

      • ​ 事件:触发的动作,里面封装了事件源。

      • ​ 监听器:当事件源触发事件时,要做的事情。一般是一个接口,由使用者来实现。

监听器作用:

在开发项目中,我们可以对:对象的创建销毁、域对象中的属性变化、会话中相关的内容进行监听 ​ 在servlet规范中共计8个监听器,监听器都是以接口形式提供的,具体功能需要我们自己来完成

1.1 监听对象创建的监听器

ServletContextListener:用于监听ServletContext对象创建和销毁的监听器

核心方法:

返回值方法名作用
voidcontextInitialized(ServletContextEvent sce)对象创建时执行此方法
voidcontextDestroyed(ServletContextEvent sce)对象销毁执行此方法
  • 参数ServletContextEvent代表事件对象,事件是【创建对象】这个动作

  • 事件对象中封装着触发事件的来源,即事件源,就是ServletContext

  • 真正的事件指的是创建或销毁ServletContext对象的操作

/**

用于监听ServletContext对象创建和销毁的监听器

@since v 2.3
*/

public interface ServletContextListener extends EventListener {

/**

对象创建时执行此方法。该方法的参数是ServletContextEvent事件对象,事件是【创建对象】这个动作

事件对象中封装着触发事件的来源,即事件源,就是ServletContext
*/
public default void contextInitialized(ServletContextEvent sce) {
}

/**

对象销毁执行此方法
*/
public default void contextDestroyed(ServletContextEvent sce) {
}

}

HttpSessionListener:用于监听HttpSession对象创建和销毁的监听器

核心方法:

返回值方法名作用
voidcsessionCreated(HttpSessionEvent se)对象创建时执行此方法
voidsessionDestroyed(HttpSessionEvent se)对象销毁执行此方法
  • 参数HttpSessionEvent 代表事件对象

  • 事件对象中封装着事件源,就是HttpSession

  • 真正的事件指的是创建或销毁HttpSession对象的操作

public interface HttpSessionListener extends EventListener {

/**

对象创建时执行此方法。
*/
public default void sessionCreated(HttpSessionEvent se) {
}

/**

对象销毁执行此方法
*/
public default void sessionDestroyed(HttpSessionEvent se) {
}

}

ServletRequestListener:用于监听ServletRequest对象创建和销毁的监听器

返回值方法名作用
voidrequestInitialized (ServletRequestEvent sre)对象创建时执行此方法
voidrequestDestroyed (ServletRequestEvent sre)对象销毁执行此方法
public interface ServletRequestListener extends EventListener {

/**

对象创建时执行此方法。
*/
public default void requestInitialized (ServletRequestEvent sre) {
}

/**

对象销毁执行此方法
*/
public default void requestDestroyed (ServletRequestEvent sre) {
} 

}

1.2监听域中属性发生变化的

ServletContextAttributeListener:用于监听ServletContext域(应用域)中属性发生变化的监听器

核心方法:

返回值方法名作用
voidattributeAdded(ServletContextAttributeEvent scae)域中添加了属性触发此方法
voidattributeRemoved(ServletContextAttributeEvent scae)域中删除了属性触发此方法
voidattributeReplaced(ServletContextAttributeEvent scae)域中属性发生改变触发此方法
  • 参数是ServletContextAttributeEvent事件对象,事件是【添加属性】。

  • 事件对象中封装着事件源,即ServletContext。

  • 当ServletContext执行setAttribute方法时,此方法可以知道,并执行。

public interface ServletContextAttributeListener extends EventListener {
    /**
     * 域中添加了属性触发此方法。参数是ServletContextAttributeEvent事件对象,事件是【添加属性】。
     * 事件对象中封装着事件源,即ServletContext。
     * 当ServletContext执行setAttribute方法时,此方法可以知道,并执行。
     */
    public default void attributeAdded(ServletContextAttributeEvent scae) {
    }

    /**
     * 域中删除了属性触发此方法
     */
    public default void attributeRemoved(ServletContextAttributeEvent scae) {
    }

    /**
     * 域中属性发生改变触发此方法
     */
    public default void attributeReplaced(ServletContextAttributeEvent scae) {
    }
}

HttpSessionAttributeListener:用于监听HttpSession域(会话域)中属性发生变化的监听器

核心方法:

返回值方法名作用
voidattributeAdded(HttpSessionBindingEvent se)域中添加了属性触发此方法
voidattributeRemoved(HttpSessionBindingEvent se)域中删除了属性触发此方法
voidattributeReplaced(HttpSessionBindingEvent se)域中属性发生改变触发此方法
  • 参数是HttpSessionBindingEvent事件对象。

  • 事件对象中封装着事件源,即HttpSession。

  • 真正的事件是指,添加、移除、替换会话域中的属性操作。

public interface HttpSessionAttributeListener extends EventListener {

    /**
     * 域中添加了属性触发此方法。
     */
    public default void attributeAdded(HttpSessionBindingEvent se) {
    }

    /**
     * 域中删除了属性触发此方法
     */
    public default void attributeRemoved(HttpSessionBindingEvent se) {
    }

    /**
     * 域中属性发生改变触发此方法
     */
    public default void attributeReplaced(HttpSessionBindingEvent se) {
    }
}

ServletRequestAttributeListener:用于监听ServletRequest域(请求域)中属性发生变化的监听器

核心方法:

返回值方法名作用
voidattributeAdded(ServletRequestAttributeEvent srae)域中添加了属性触发此方法
voidattributeRemoved(ServletRequestAttributeEvent srae)域中删除了属性触发此方法
voidattributeReplaced(ServletRequestAttributeEvent srae)域中属性发生改变触发此方法
  • 参数是ServletRequestAttributeEvent事件对象。

  • 事件对象中封装着事件源,即ServletRequest。

  • 真正的事件是指,添加、移除、替换会话域中的属性操作。

public interface ServletRequestAttributeListener extends EventListener {
    /**
     * 域中添加了属性触发此方法。
     */
    public default void attributeAdded(ServletRequestAttributeEvent srae) {
    }

    /**
     * 域中删除了属性触发此方法
     */
    public default void attributeRemoved(ServletRequestAttributeEvent srae) {
    }

    /**
     * 域中属性发生改变触发此方法
     */
    public default void attributeReplaced(ServletRequestAttributeEvent srae) {
    }
}

1.3 和会话相关的两个感知型监听器

和会话域相关的两个感知型监听器是无需配置的,直接编写代码即可

HttpSessionBinderListener:用于感知对象和和会话域绑定的监听器

返回值方法名作用
voidvalueBound(HttpSessionBindingEvent event)当数据加入会话域时 绑定此方法执行
voidvalueUnbound(HttpSessionBindingEvent event)会话域移除时也 ,解绑 此方法执行
public interface HttpSessionBindingListener extends EventListener {
​
    /**
     * 当数据加入会话域时,也就是绑定,此方法执行
     */
    public default void valueBound(HttpSessionBindingEvent event) {
    }
​
    /**
     * 当从会话域移除时,也就是解绑,此方法执行
     */
    public default void valueUnbound(HttpSessionBindingEvent event) {
    }
}

HttpSessionActivationListener:用于感知会话域中对象钝化和活化的监听器

返回值方法名作用
voidsessionWillPassivate(HttpSessionEvent se)当会话域中的数据钝化时,此方法执行
voidsessionDidActivate(HttpSessionEvent se)当会话域中的数据活化时(激活),此方法执行
public interface HttpSessionActivationListener extends EventListener {
​
    /**
     * 当会话域中的数据钝化时,此方法执行
     */
    public default void sessionWillPassivate(HttpSessionEvent se) {
    }
​
    /**
     * 当会话域中的数据活化时(激活),此方法执行
     */
    public default void sessionDidActivate(HttpSessionEvent se) {
    }
}

2. 监听器的使用

在实际开发中,我们可以根据具体情况来从这8个监听器中选择使用。感知型监听器由于无需配置,只需要根据实际需求编写代码,所以此处我们就不再演示了。我们在剩余6个中分别选择一个监听对象创建销毁和对象域中属性发生变化的监听器演示一下。

2.1 ServletContextListener的使用

/*
    ServletContext对象的创建和销毁的监听器
 */
//@WebListener
public class ServletContextListenerDemo implements ServletContextListener{
    /*
        ServletContext对象创建的时候执行此方法
     */
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("监听到了对象的创建...");
​
    //获取对象
    ServletContext servletContext = sce.getServletContext();
   //System.out.println(servletContext);
​
    //添加属性
    servletContext.setAttribute("username","zhangsan");
​
    //替换属性
    servletContext.setAttribute("username","lisi");
​
    //移除属性
    servletContext.removeAttribute("username");
}
​
/*
    ServletContext对象销毁的时候执行此方法
 */
@Override
public void contextDestroyed(ServletContextEvent sce) {
    System.out.println("监听到了对象的销毁...");
}
​
}

配置监听器:

<!--配置监听器-->
<listener>
    <listener-class>com.by.web.listener.ServletContextListenerDemo</listener-class>
</listener>

2.2 ServletContextAttributeListener的使用

/*
    应用域对象中的属性变化的监听器
 */
//@WebListener
public class ServletContextAttributeListenerDemo implements ServletContextAttributeListener{
    /*
        向应用域对象中添加属性时执行此方法
     */
    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        System.out.println("监听到了属性的添加...");
​
    //获取应用域对象
    ServletContext servletContext = scae.getServletContext();
    //获取属性
    Object value = servletContext.getAttribute("username");
    System.out.println(value);
}
/*
    向应用域对象中替换属性时执行此方法
 */
@Override
public void attributeReplaced(ServletContextAttributeEvent scae) {
    System.out.println("监听到了属性的替换...");
​
    //获取应用域对象
    ServletContext servletContext = scae.getServletContext();
    //获取属性
    Object value = servletContext.getAttribute("username");
    System.out.println(value);
}
/*
    向应用域对象中移除属性时执行此方法
 */
@Override
public void attributeRemoved(ServletContextAttributeEvent scae) {
    System.out.println("监听到了属性的移除...");
​
   //获取应用域对象
  ServletContext servletContext = scae.getServletContext();
  //获取属性
 Object value = servletContext.getAttribute("username");
  System.out.println(value);
}
​
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/691846.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【话题达人】你觉得存款难吗?如何看待半数年轻人存款不住10万?这不是基操

导读 近日&#xff0c;有调查称 大概五分之一的年轻人存款在一万元以内。10万元存款是一个“坎”&#xff0c;存款超过10万就会超过53.7%的人。年轻人(23-28) 和 存款 两个词碰撞在一起&#xff0c;引来了广泛的关注和讨论。你认为年轻人存款难吗&#xff1f; 先说结论&#…

程序员之马上结束任务

计算机系的男同学追班里一女同学&#xff0c;结果此女总是躲躲闪闪。 男的看没戏&#xff0c;就另找了一个去追&#xff0c;结果这女的不满意了&#xff0c;质问这男的为啥抛弃她。 男的问&#xff1a;“请教一个电脑问题&#xff0c;如果你点击一个程序&#xff0c;总是提示…

浓浓书香伴新春,TVP邀你共读7本精选好书!

引言 颜之推在《颜氏家训勉学》中曾云“夫所以读书学问&#xff0c;本欲开心明目&#xff0c;利于行耳。”所谓读书学问&#xff0c;就是要开阔自己的胸襟&#xff0c;提高自己的鉴别力&#xff0c;从而有利于亲身实践。岁末年初&#xff0c;庭前飘雪&#xff0c;TVP 带你赴一场…

刚去了家新公司,发现个个都是卷王 , 真想离职了。。。

个个都说想躺平了&#xff0c;可是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;前段时间我们公司来了个00后&#xff0c;才工作一年&#xff0c;跳槽到我们公司起薪15K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。…

Python元组、集合、字典

总有一天你要一个人在暗夜中&#xff0c;向那座桥走过去 文章目录 一、元组 字符串、元组、列表的总结 二、集合 1.定义空集合 2.创建集合 &#xff08;1&#xff09;直接创建 &#xff08;2&#xff09;set函数 3.列表、元组、字符串、字典的去重 4.向集合中添加元素…

VUE-001-在表格单元格(el-table-column)中添加超链接访问

在进行前端网页开发时&#xff0c;通常列表数据我们使用table展示。那么如何在 el-table-column 单元格中使用超链接呢&#xff1f; 如下即是解决方式的一种&#xff1a; 仅需要将如下代码&#xff1a; <el-table-column prop"url" label"访问链接" …

软件测试入门(测试环境及用例编写)

目录 一、什么是软件环境 二、软件运行环境类型 三、什么是测试用例&#xff08;测试case&#xff09; 四、测试用例包含哪些信息 五、测试用例设计方法 六、如何设计一个功能点的case 一、什么是软件环境 人有人类的生存环境&#xff1b;软件有软件的运行环境 二、软件…

数通王国历险记之TCP协议的三次握手和四次挥手

系列文章目录 数通王国历险记&#xff08;2&#xff09; 目录 前言 一、TCP我们称之为可靠的传输层协议&#xff0c;为什么称它为可靠呢? 二、TCP的建立——三次握手 1&#xff0c;提前知道TCP协议报文中都有些啥&#xff1f; 2.第一次握手 总的来说:就是PC1向PC2发出一个…

MySql进阶篇(附面试快速答法)

文章目录 1、慢查询1.1、如何定位慢查询呢&#xff1f;小总结面试快速答法 1.2、SQL语句执行很慢, 如何分析呢&#xff1f;小总结面试快速答法 2、存储引擎2.1、MySQL体系结构2.2、存储引擎特点小总结 3、索引3.1、什么是索引&#xff1f;小总结面试快速答法 3.2、聚集索引和非…

mesh网格数据解析及cesium可视化实现

代码实现运行效果 技术术语 Mesh通常指网络拓扑中的网状结构。在计算机网络中&#xff0c;Mesh是指每个节点都与其他节点相连&#xff0c;形成一个无中心的网状结构。Mesh网络常见于分布式计算、传感器网络、互联网等场景中。另外&#xff0c;在3D计算机图形学中&#xff0c;M…

SSMP整合案例(8) Restful开发表现层接口

之前几篇文章后面 我们的数据层 和 业务层基本就搭好了 然后 我们就要处理表现层 表现层开发 我们就还是用之前讲过的 Restful 然后 用Postman来做我们接口的测试 那话不多说 直接开干 在启动类同目录下创建一个 controller 包 下面创建一个类 叫 BookController BookControl…

5-3图像处理经典案例:椒盐噪声运算处理(matlab程序)

1.简述 椒盐噪声也称为脉冲噪声&#xff0c;是图像中经常见到的一种噪声&#xff0c;它是一种随机出现的白点或者黑点&#xff0c;可能是亮的区域有黑色像素或是在暗的区域有白色像素&#xff08;或是两者皆有&#xff09;。椒盐噪声的成因可能是影像讯号受到突如其来的强烈干…

C++ 基础知识(1)

文章目录 写在前面1、第一个c程序1.1、输入输出及注释1.2、命名空间 2、变量、数组、指针2.1、基本类型2.2、数组与字符串2.3、指针2.4、指针空值2.5、引用 3、判断与循环3.1、if、else3.2、for、while 4、函数与参数4.1、函数与缺省参数4.2、函数重载4.3、内联函数 写在前面 …

什么是云安全访问服务

云安全访问服务(Cloud Secure Access Service&#xff0c;CSAS)是一种网络安全服务&#xff0c;旨在保护云环境下的应用程序和数据。它提供了一种安全访问云应用程序和数据的方式&#xff0c;同时也可以保护云中的敏感信息不被未经授权的用户访问。CSAS包括多种安全功能&#x…

从程序员到架构师——缓存层场景

读缓存 业务场景 如何将十几秒的查询请求优化成毫秒级&#xff1f; 这次项目针对的系统是一个电商系统。每个电商系统都有个商品详情页。一开始这个页面很简单&#xff0c;只包括商品的图片、介绍、规格、评价等。 刚开始&#xff0c;这个页面打开很快&#xff0c;系统运行…

控制台里的神秘代码 \033[

“\033[”这串字符在控制台里有特殊的应用。 在串口工具里&#xff08;如sscom&#xff09;看着是一串字符。 在控制台里却可以改变字体颜色&#xff0c;显示进度条&#xff0c;甚至字符动画。 1 字体控制 #include <stdio.h>int main() {printf("以下是测试文字&…

MM 采购凭证的交货成本 表

如上图的交货成本表再 EKBZ表里面

9.1 I/O模型

目录 I/O基本概念 同步和异步 阻塞和非阻塞 五种I/O模型 五种I/O模型比较 I/O基本概念 I/O即数据的读取&#xff08;接收&#xff09;或写入&#xff08;发送&#xff09;操作 通常用户进程中的一个完整I/O分为两个阶段 用户进程空间<-->内核空间 内核空间<--&…

【GPT】中文通用大模型梳理与测评(C-Eval 、AGIEval、MMLU、SuperCLUE)

文章目录 概述申请后直接使用大模型开源可本地部署 通识数据集测评&#xff08;C-Eval 、AGIEval、MMLU、SuperCLUE&#xff09;自媒体报道SuperCLUE&#xff1a;中文通用大模型综合性基准C-Eval&#xff1a;中英测评&#xff08;清华上交提出&#xff09;当前排名&#xff08;…

【Unity编辑器扩展】(三)PSD转UGUI Prefab, 一键拼UI/同步字体/自动9宫切图(完结篇)

工具效果&#xff1a; 第一步&#xff0c;把psd图层转换为可编辑的节点树&#xff0c;并自动解析UI类型、自动绑定UI子元素&#xff1a; 第二步, 点击“生成UIForm"按钮生成UI预制体 (若有UI类型遗漏可在下拉菜单手动点选UI类型)&#xff1a; 验证一键生成UI效果: 书接上…