Listener

观察者设计模式:

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

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

​1. 事件源:触发事件的对象。
2.​ 事件:触发的动作,里面封装了事件源。
3. 监听器:当事件源触发事件时,要做的事情。一般是一个接口,由使用者来实现。

Listener:

  • Listener是监听器,可以对,对象的创建、销毁、域对象属性的变化、会话进行监听
  • 监听器都是基于观察者设计模式的,Servlet一共有八个监听器都是接口形式的。

监听对象的监听器:

ServletContextListener:

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

返回值方法名说明
voidcontextInitialized(ServletContextEvent sce)对象创建时执行该方法
voidcontextDestroyed(ServletContextEvent sce)对象销毁时执行该方法

ServletContextEvent:

代表事件对象,事件对象封装了事件源,也就是ServletContext,真正的事件指的是创建或销毁ServletContext对象的操作

HttpSessionListener:

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

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

HttpSessionEvent:

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

ServletRequestListener:

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

返回值方法名说明
voidrequestInitialized (ServletRequestEvent sre)对象创建时执行该方法
voidrequestDestroyed(ServletRequestEvent sre)对象销毁时执行该方法

ServletRequestEvent:

代表事件对象,事件对象封装了事件源,也就是ServletRequest,真正的事件指的是创建或销毁ServletRequest对象的操作

演示:
@WebListener
public class ListenerDemo01 implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("监听到对象的创建");// 获取对象System.out.println(sce.getServletContext());}@Overridepublic void contextDestroyed(ServletContextEvent sce) {System.out.println("监听到对象销毁");}
}

监听域对象属性变化的监听器:

ServletContextAttributeListener:

用于监听ServletContext应用域中属性的变化

返回值方法名说明
voidattributeAdded(ServletContextAttributeEvent scae)域中添加属性时执行该方法
voidattributeRemoved(ServletContextAttributeEvent scae)域中移除属性时执行该方法
voidattributeReplaced(ServletContextAttributeEvent scae)域中替换属性时执行该方法

ServletContextAttributeEvent:

代表事件对象,事件对象封装了事件源,也就是ServletContext,真正的事件指的是添加、移除、替换应用域中属性的操作

HttpSessionAttributeListener:

用于监听HttpSession会话域中属性的变化

返回值方法名说明
voidattributeAdded(HttpSessionBindingEvent se)域中添加属性时执行该方法
voidattributeRemoved(HttpSessionBindingEvent se)域中移除属性时执行该方法
voidattributeReplaced(HttpSessionBindingEvent se)域中替换属性时执行该方法

HttpSessionBindingEvent:

代表事件对象,事件对象封装了事件源,也就是HttpSession,真正的事件指的是添加、移除、替换应用域中属性的操作

ServletRequestAttributeListener:

用于监听ServletRequest请求域中属性的变化

返回值方法名说明
voidattributeAdded(ServletRequestAttributeEvent srae)域中添加属性时执行该方法
voidattributeRemoved(ServletRequestAttributeEvent srae)域中移除属性时执行该方法
voidattributeReplaced(ServletRequestAttributeEvent srae)域中替换属性时执行该方法

ServletRequestAttributeEvent:

代表事件对象,事件对象封装了事件源,也就是ServletRequestAttribute,真正的事件指的是添加、移除、替换应用域中属性的操作

演示:

执行添加、替换、移除的类

@WebListener
public class ServletContextListenerDemo01 implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("监听到对象的创建");// 获取对象ServletContext servletContext = sce.getServletContext();System.out.println(servletContext);// 添加属性servletContext.setAttribute("username", "itzhuzhu");// 替换属性servletContext.setAttribute("username", "hanxin");// 移除属性servletContext.removeAttribute("username");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {System.out.println("监听到对象销毁");}
}

监听器

@WebListener
public class ServletContextAttributeListenerDemo01 implements ServletContextAttributeListener {@Overridepublic void attributeAdded(ServletContextAttributeEvent event) {System.out.println("监听到了属性的添加");// 获取应用域对象ServletContext servletContext = event.getServletContext();// 获取属性Object username = servletContext.getAttribute("username");System.out.println(username);}@Overridepublic void attributeReplaced(ServletContextAttributeEvent event) {System.out.println("监听到了属性的替换");// 获取应用域对象ServletContext servletContext = event.getServletContext();// 获取属性Object username = servletContext.getAttribute("username");System.out.println(username);}@Overridepublic void attributeRemoved(ServletContextAttributeEvent event) {System.out.println("监听到了属性的移除");// 获取应用域对象ServletContext servletContext = event.getServletContext();// 获取属性Object username = servletContext.getAttribute("username");System.out.println(username);}
}
配置文件形式配置监听器:
    <listener><listener-class>com.listener.ServletContextAttributeListenerDemo01</listener-class></listener><listener><listener-class>com.listener.ServletContextListenerDemo01</listener-class></listener>

监听会话相关的感知型监听器:

感知型监听器:当监听器配置好了以后还需要用注解xml做一些配置,但是感知性监听器是不需要的,定义好了以后就可以直接使用了

HttpSessionBinderListener:

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

返回值方法名说明
voidvalueBound(HttpSessionBindingEvent event)数据添加到会话域中时执行该方法
voidvalueUnbound(HttpSessionBindingEvent event)数据从会话域中移除时执行该方法

HttpSessionBindingEvent:

代表事件对象,事件对象封装了事件源,也就是HttpSession,真正的事件指的是添加、移除会话域中数据的操作

HttpSessionActivationListener:

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

返回值方法名说明
voidsessionWillPassivate(HttpSessionEvent se)会话域中数据钝化时执行该方法
voidsessionDidActivate(HttpSessionEvent se)会话域中数据活化时执行该方法

HttpSessionEvent:

代表事件对象,事件对象封装了事件源,也就是HttpSession,真正的事件指的是钝化、活化的操作

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

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

相关文章

BZOJ 1083: [SCOI2005]繁忙的都市【Kruscal最小生成树裸题】

1083: [SCOI2005]繁忙的都市 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2925 Solved: 1927[Submit][Status][Discuss]Description 城市C是一个非常繁忙的大都市&#xff0c;城市中的道路十分的拥挤&#xff0c;于是市长决定对其中的道路进行改造。城市C的道 路是这样分…

Mysql介绍与安装LinuxmacOS系统

数据库&#xff1a; 用于存储和管理数据的仓库 数据库的好处&#xff1a; 可以持久化存储数据方便存储和管理数据使用了统一的方式操作数据库 – SQL 常见的数据库&#xff1a; Oracle&#xff1a;收费的大型数据库&#xff0c;Oracle公司的产品。Oracle收购SUN公司&#xff0c…

如何查看Laravel版本号的三种方法

1.PHP artisan --version 2.vim vendor/laravel/framework/src/Illuminate/Foundation/Application.php 3&#xff1a;可以写在路由里 5.4版本的路由文件夹是routes。我们可以写在routes\web.php里。 Route::get(laravel-version, function(){ $laravel app(); return…

最全的Mysql数据类型

数值类型&#xff1a; 类型大小范围&#xff08;有符号&#xff09;范围&#xff08;无符号&#xff09;用途Bit1bytes-128 ~ 120 ~ 255小整数值TINYINT1 byte-128 ~ 1270 ~ 255小整数值SMALLINT2 bytes-32768 ~ 327670 ~ 65535大整数值MEDIUMINT3 bytes-8388608 ~ 83886070 ~…

02_反汇编_反编译

实际上安卓的应用都是zip包,只不过把zip扩展名修改了,修改成了APK.所以如果你想拿到它的图片的话,实际上特别简单&#xff0c;你就把它这个.apk换成.zip.换成.zip之后这里的图片资源就都可以拿到了. 有些公司可能美工的水平或者美工的人数比较少&#xff0c;项目还比较急&#…

SQL约束语法

约束 作用&#xff1a;对表中的数据进行限定&#xff0c;保证数据的正确性、有效性、完整性&#xff01; 约束分类&#xff1a; 约束说明PRIMARY KEY主键约束PRIMARY KEY AUTO_INCREMENT主键、自动增长UNIQUE唯一约束NOT NULL非空约束FOREIGN KEY外键约束FOREIGN KEY ON UPDAT…

hdu 2489 Minimal Ratio Tree

https://vjudge.net/problem/HDU-2489 题意&#xff1a;求一个完全图的最优比率生成树&#xff0c;点的个数由题给出。最优比率生成树是边的权值之和与点的权值之和的比值最小的生成树。 思路&#xff1a;一开始用dfs枚举搜索每一种情况&#xff0c;t了&#xff0c;枚举的情况太…

SQL多表关联

多表关联&#xff1a; 多张数据表之间是可以有一定的关联关系&#xff0c;这种关联关系可以通过外键约束实现 多表的分类&#xff1a; 一对一一对多多对多 一对一&#xff1a; 一张表对应一张表 适用场景举例&#xff1a; 人和身份证。一个人只能有一个身份证&#xff0c;一个身…

背包问题 codevs2210 数字组合

数字组合 题目描述 Description在N个数中找出其和为M的若干个数。先读入正整数N和M&#xff0c; 再读入N个正数&#xff08;可以有相同的数字&#xff0c;每个数字均在1000以内&#xff09;&#xff0c; 在这N个数中找出若干个数&#xff0c; 使它们的和是M&#xff0c; 把满足…

SQL多表查询

多表查询分类&#xff1a; 内连接查询 显式内连接隐式内连接 外连接查询 左外连接右外连接 子查询自关联查询 准备数据&#xff1a; -- 创建user表 CREATE TABLE USER(id INT PRIMARY KEY AUTO_INCREMENT, -- 用户idNAME VARCHAR(20), -- 用户姓名age INT …

HTTP协议整理

一、概念 1.HTTP协议&#xff1a;即超文本传输协议(Hypertext transfer protocol)。是一种详细规定了浏览器和Web服务器之间互相通信的规则&#xff0c;它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。它可以使浏览器更加高效&#xff0c;使网络传输减少。…

【DDD】--好文收藏

索引&#xff1a; 目录索引 发现一批好文&#xff0c;完整系列&#xff0c;攒~~ 随笔分类 - DDD - 『圣杰』 DDD理论学习系列&#xff08;1&#xff09;-- 通用语言 笔记&#xff1a; 通用语言&#xff1a; a) 简单&#xff0c;便于理解、传播。 b) 需要通用&#xff0c;能够准…

SQL存储过程、存储函数

概念&#xff1a; 存储过程和函数&#xff1a; 存储过程和函数是事先经过编译并存储在数据库中的一SQL语句的集合 存储过程和函数的好处&#xff1a; 存储过程和函数可以重复使用&#xff0c;减轻开发人员的工作量。类似于java中方法可以多次调用减少网络流量&#xff0c;存储…

meta http-equiv=X-UA-Compatible content=IE=edge,chrome=1 /

X-UA-Compatible是针对IE8新加的一个设置&#xff0c;对于IE8之外的浏览器是不识别的&#xff0c;这个区别与content"IE7"在无论页面是否包含<!DOCTYPE>指令&#xff0c;都像是使用了 Windows Internet Explorer 7的标准模式。而content"IEEmulateIE7&quo…

错误页跳转

错误页跳转的语法 <%page errorPage"出现错误跳转页面"%> <%page isErrorPage"true/false%>跳转到此页面进行处理错误 代码如下&#xff1a; <%page language"java" contentType"text/html" pageEncoding"GBK"%&g…

yum 安装mysql数据库

1、先查看是否有安装mysql&#xff0c;有的话通过yum remove mysql先卸载掉&#xff0c;卸载完成后执行 yum install -y mysql-server mysql mysql-deve 2、启动mysql服务 service mysqld start  //也可以通过/etc/init.d/mysqld start启动 3、设置为开机自启动 chkconfig m…

修改项目名称之后,访问不到项目的问题

转载于:https://www.cnblogs.com/Joke-Jay/p/7190187.html

Mysql锁机制详解

Mysql锁&#xff1a; 在多线程当中如果想保证数据的准确性是如何实现的呢&#xff1f;没错&#xff0c;通过同步实现。同步就相当于是加锁。加了锁以后有什么好处呢&#xff1f;当一个线程真正在操作数据的时候&#xff0c;其他线程只能等待。当一个线程执行完毕后&#xff0c;…

stanford-parser for C#

在项目里用到C#对英文句子进行词性标注。比較成熟的英文词性标注软件是stanford-parser。它个C#版本号&#xff0c;也是借助于IKVM完毕JAVA-C#的转换。详细配置过程例如以下&#xff1a; 1、下载stanford-parser的jar包 http://nlp.stanford.edu/software/lex-parser.shtml 2…

保姆级Mycat操作详解

Mycat环境搭建&#xff1a; 下载&#xff1a;http://dl.mycat.org.cn/2.0/ 上传到虚拟机并解压 tar -zxvf mycat.tar.gz cd mycat ll授权&#xff1a;设置mycat权限 chmod -R 777 mycat环境变量&#xff1a;配置环境变量 # 编辑文件 vi /etc/profile # 添加内容&#xff…