当前位置: 首页 > news >正文

Listener(监听器)

Listener 介绍

观察者设计模式

在介绍 Listener(监听器)之前,需要先了解观察者设计模式,因为所有的监听器都是观察者设计模式的体现。

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

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

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

  1. 事件源:触发事件的对象。

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

  3. 监听器:当事件源触发事件时,要做的事情。一般是一个接口,由使用者来实现。(此处还涉及一种设计模式的思想:策略模式)

下图描述了观察者设计模式组成:

image

Listener 介绍

在程序当中我们可以对以下情况进行监听:对象的创建销毁、域对象中属性的变化、会话相关内容。

Servlet 规范中共计 8 个监听器,监听器都是以接口形式提供的,具体功能需要我们自己来完成。

Listener 配置方式

Listender 有两种配置方法:

  1. 注解方式
    @WebListener

  2. web.xml 配置方式

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

Servlet 规范中的 8 个监听器

  • 监听对象的

    1. ServletContextListener
    2. HttpSessionListener
    3. ServletRequestListener
  • 监听域中属性变化的

    1. ServletContextAttributeListener
    2. HttpSessionAttributeListener
    3. ServletRequestAttributeListener
  • 会话相关的感知型

    1. HttpSessionBindingListener
    2. HttpSessionActivationListener

监听对象的监听器

1)ServletContextListener

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

核心方法:

返回值方法名作用
voidcontextlnitialized(ServletContextEvent sce)对象创建时执行该方法
voidcontextDestroyed(ServletContextEvent sce)对象销毁时执行该方法

ServletContextEvent 参数:代表事件对象

  • 事件对象中封装了事件源,也就是 ServletContext
  • 直正的事件指的是创建或销毁 ServletContext 对象的操作

2)HttpSessionListener

用于监听 HttpSession 对象的创建和销毁核心方法。

核心方法:

返回值方法名作用
voidsessionCreated(HttpSessionEventse)对象创建时执行该方法
voidsessionDestroyed(HttpSessionEvent se对象销毁时执行该方法

HttpSessionEvent 参数:代表事件对象

  • 事件对象中封装了事件源,也就是 HttpSession
  • 真正的事件指的是创建或销毁 HttpSession 对象的操作

3)ServletRequestListener

用于监听 ServletRequest 对象的创建和销毁核心方法。

核心方法:

返回值方法名作用
voidrequestinitialized(ServletRequestEvent sre)对象创建时执行该方法

文章转载自:
http://bowyer.zzgtdz.cn
http://annoyance.zzgtdz.cn
http://aperture.zzgtdz.cn
http://bourgeoisie.zzgtdz.cn
http://budo.zzgtdz.cn
http://anilinctus.zzgtdz.cn
http://caudiform.zzgtdz.cn
http://brutishly.zzgtdz.cn
http://adjectivally.zzgtdz.cn
http://babu.zzgtdz.cn
http://bretagne.zzgtdz.cn
http://anteprandial.zzgtdz.cn
http://chantage.zzgtdz.cn
http://bandgap.zzgtdz.cn
http://anglist.zzgtdz.cn
http://caravan.zzgtdz.cn
http://beaver.zzgtdz.cn
http://cdt.zzgtdz.cn
http://chivy.zzgtdz.cn
http://boffin.zzgtdz.cn
http://cahoot.zzgtdz.cn
http://arbitratorship.zzgtdz.cn
http://caponier.zzgtdz.cn
http://carzey.zzgtdz.cn
http://bothersome.zzgtdz.cn
http://briefly.zzgtdz.cn
http://bast.zzgtdz.cn
http://caparison.zzgtdz.cn
http://bosporus.zzgtdz.cn
http://alliterate.zzgtdz.cn
http://www.dtcms.com/a/281096.html

相关文章:

  • 拓扑排序一>可达性统计
  • [WUSTCTF2020]朴实无华
  • Vue 3的核心机制-解析事件流、DOM更新、数据请求、DOM操作规范及组件库DOM操作的解决方案
  • 日记_7.14_实际开发的进步
  • 使用Spring Cloud LoadBalancer报错java.lang.IllegalStateException
  • Wordpress登录数据库连接失败的问题
  • Web攻防-PHP反序列化字符逃逸增多减少成员变量属性解析不敏感Wakeup绕过
  • 网络:TCP序列号和滑动窗口,顺序保证
  • 【R语言】警告conversion failure on ‘中文字符‘ in ‘mbcsToSbcs‘: for 注 (U+6CE8)
  • 枪机、支持POE、4G连接交换机实现多屏幕显示
  • 【郑大二年级信安小学期】Day12:编写渗透测试脚本搭建虚拟环境
  • 淘宝扭蛋机小程序开发:重构电商娱乐化体验的新范式
  • 不同系统记录项目进度不一致,如何统一口径
  • 【Linux系统】命令行参数和环境变量
  • gitee某个分支合并到gitlab目标分支
  • 微信小程序未登录状态下的导航拦截有哪些方法可以实现
  • AI大模型应用架构演进:从LLM基础到Agent协作的范式转移
  • GBase 8a 与 Spring Boot + MyBatis 整合实战:从环境搭建到CRUD操作
  • 扩展:操作系统之高性能网络计算
  • 使用 mongoimport 导入本地 JSON 文件到 MongoDB 及数据查看指南
  • 微信小程序入门实例_____从零开始 开发一个每天记账的微信小程序
  • Rust语言
  • Isaac Sim仿真赋能机器人工作流,推动具身智能在机器人领域研究
  • 深入解析:磁盘级文件与内存级(被打开)文件的本质区别与联系
  • MySQL锁机制与SQL优化详解
  • Vue 中 effectScope() 的全面解析与实战应用
  • 虚拟机删除操作
  • lanch4j将jar转成exe
  • 文心4.5开源背后的战略棋局:百度为何选择All in开放?
  • Django基础(二)———URL与映射