16.Listener(监听器)
/*监听器*/
java的事件监听机制(主要是对一些web元素的监听 (ServletContext(计时器),HttpSession和ServletRequest))
1.事件监听涉及到三个组件:事件源、事件对象、事件监听器(当事件源上发生某个事件对象时,调用事件监听器中的方法)
2.当事件源上发生某一个动作时,它会调用事件监听器的一个方法,并在调用该方法时把事件对象传递进去,
开发人员在监听器中通过事件对象,就可以拿到事件源,从而对事件源进行操作。
设计一个可以 /*被别的对象监听*/的对象(事件源类 事件对象类 事件监听器接口)如:windows窗口
(Windows窗口是事件源,当点击关闭时,调用事件监听器类的关闭方法,传递事件对象 Event e 然后再通过e.getSource拿到事件源,重写关闭方法)
/*JAVAWEB中的监听器*/
1.写监听器(实现相应接口后写方法)
public class UserLoginListener implements HttpSessionAttributeListener { @Override
public void attributeAdded(HttpSessionBindingEvent se) {
//从servletContext 域中得到用于保存所有的登陆用户的map
ServletContext context = se.getSession().getServletContext();
Map map = (Map) context.getAttribute("map");
if (map == null) {
map = new HashMap();
context.setAttribute("map", map);
} Object obj = se.getValue();
HttpSession session = se.getSession();
if (obj instanceof User) {
User user = (User) obj;
map.put(user.getUsername(), session);
} } @Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub } @Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub } }
2.注册到事件源上(web.xml)
<listener>
<listener-class>cn.itcast.listener.UserLoginListener</listener-class>
</listener>
在Servlet监听器分类
用于监听的事件源分别为:ServletContext(计时器),HttpSession和ServletRequest
1.监听域对象自身的创建和销毁的事件监听器。
2.监听三个域对象属性的变化,三个域对象有各自的监听器接口(如:ServletContextAttributeListener)
这三个接口都定义了三个方法,对属性的变化(增,删,替换)的监听
3.监听绑定到HttpSession域中的某个对象的状态的事件监听器。
注: 监听器对象只有一个(和过滤器类似)(即一个session监听器为所有的session创建服务)
应用:
1.统计当前在线用户个数(使用session监听器 只要用户访问,即为用户创建session,统计内存里面有多少session)(不准确)
2.自定义session扫描器(
1.实现HttpSessionLinstener和ServletContextListener接口
2.在servletContext对象创建时,设置一个定时器 每隔一分钟执行任务
3.对任务进行描述 (TimerTask的run方法))
注:1.一个类可以实现多个接口(实现HttpSessionLinstener和ServletContextListener接口),这个类可以 /*监听两个事件源*/
2.将每个session对象放在一个List中 (涉及多次增删改查,所以用LinkedList)
3.如果使用Iterator对List进行迭代 Iterator如果并发执行操作,迭代器会出现不确定性行为。(抛出ConcurrentModificationException)(并发修改异常)
/*ListIterator可以并发执行操作*/ 不会抛出这种异常
出现这种异常的原因(集合在迭代的过程中 集合元素不能增删) 如果使用Iterator 只能 List集合自己完成增删
如果使用 ListIterator 可以使用迭代器(不是集合自身)的remove和 add方法
/*监听绑定到HttpSession域中的某个对象的状态的事件监听器。 */
保存在Session域中的对象可以有多种状态:
1.绑定到Session中;
2.从Session域中解除绑定;
3.随Session对象持久化到一个存储设备中(钝化);
4.随Session对象从一个存储设备中恢复 (活化)
Servlet规范中定义了两个特殊的监听器接口来帮助JavaBean对象了解自己在Session域中的这些状态“HTTPSessionBindingListener接口(1、2)
和HttpSessionActivationListener(3、4)接口,实现这两个接口的类 /*不需要*/在web.xml文件中注册(因为它们监听的对象是自己)
16.Listener(监听器)的更多相关文章
- [Java] JSP笔记 - Listener 监听器
Java Web 开发时,可以使用 Listener 来监听来监听一些事件,从而实现一些功能.实际上这个监听器,原理就是 Delphi 中大家常用的各种事件. 1. 那么,监听器的主要用途用哪些呢: ...
- Java ---Listener监听器
在我们的web容器中,一直不断的触发着各种事件,例如:web应用启动和关闭,request请求到达和结束等.但是这些事件通常对于开发者来说是透明的,我们可以根据这些接口开发符合我们自身需求的功能.在w ...
- Listener监听器和Filter过滤器
Listener监听器 WEB中的监听器 WEB 中的 Listener 和 Filter 是属于 Servlet 规范中的高级的技术.WEB中的监听器共有三类八种(监听三个域对象)* 事件源:Ser ...
- 转-JavaWeb三大组件之Listener监听器
JavaWeb三大组件之Listener监听器一.概述1,它是一个接口,内容由我们来实现 2,它需要注册,例如注册在按钮上 3,监听器中的方法,会在特殊事件发生时被调用 二.JavaWeb中的监听器1 ...
- Servlet3.0的注解自定义原生Listener监听器实战
简介:监听器介绍和Servlet3.0的注解自定义原生Listener监听器实战 自定义Listener(常用的监听器 servletContextListener.httpSessionListen ...
- 【Servlet】Java Serlvet Listener 监听器
Listener监听器 Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理 容器产生的事件分类 - 生命周期相关的事件 - 设置和删除Attribute数据 ...
- 15 Filter过滤器和Listener监听器
1.Filter:过滤器 (1) 概念:生活中的过滤器:净水器,空气净化器,土匪.web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能.过滤器的作用:一般用于完成通用的 ...
- .jsp文件的使用和理解以及一些小练习和Listener监听器
什么是 jsp,它有什么用? jsp 的全换是 java server pages.Java 的服务器页面.jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据.因为 Servle ...
- 什么是Listener监听器
什么是Listener监听器 1,Listener 监听器它是JavaWeb的三大组件之一.JavaWeb的三大组件:Servlet程序,Filter过滤器,Listener监听器. 2,Listen ...
随机推荐
- Visual Studio Code 上java开发环境搭建
在把一些开源的SDK中java代码转成C#代码时经常需要写点java代码来实验下功能,装个Eclipse或IDEAs吧,好像也不太值当,所以用vs code搭个环境偶尔来实验下.以下: 1.下载并装好 ...
- Qt编写安防视频监控系统8-双击节点
一.前言 在所有的视频监控系统中,双击摄像机的节点,对应摄像机加载到当前焦点通道显示,这个都是必须具备的功能,还有一些厂家会做双击NVR节点,自动加载该NVR下的所有摄像机全部显示,从通道1开始到通道 ...
- 查看进程的命令ps
查看进程的命令:ps aux strace -p pid(进程id) 杀死进程:kill pid(进程id)强制杀死进程:kill -9 pid(进程id) linux ps 命令查看进程状态linu ...
- libvirt2.0安装
目录 1.libvirt介绍 2.卸载系统自带的libvirt 2.1.查看当前安装的libvirt相关包 2.2.全部卸载掉 3.使用tar包编译安装 3.1.解压缩 3.2.生成Makefile文 ...
- jdbc配置及使用测试
源码:https://github.com/xiaostudy/jdbc_test1 这是没有使用连接池的 目录 创建的sql语句create.sql DROP TABLE IF EXISTS t_u ...
- NameNode 和 SecondaryNameNode
1. NN 和 2NN 工作机制 NameNode 会产生在磁盘中备份元数据的FsImage; 每当元数据有更新或者添加数据时,修改内存中的元数据并追加到Edits中; SecondaryNameNo ...
- HDFS 读/写数据流程
1. HDFS 写数据流程 客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件, NameNode 检查目标文件是否已存在,父目录是否存在: NameNo ...
- Windows远程连接server(Linux系统)及可视化
方法1:命令行连接后使用server上安装好的可视化编辑器IDE: Step 1: 工具准备:putty.exe:Xming-6-9-0-31-setup.exe:Xming-fonts-7-7-0- ...
- 【转贴】linux 终端报Message from syslogd
linux 终端报Message from syslogd xiao9873341760人评论8537人阅读2017-03-27 14:19:31 https://blog.51cto.com/xia ...
- appium+python教程1
Python3+Appium安装使用教程 一.安装 我们知道selenium是桌面浏览器自动化操作工具(Web Browser Automation) appium是继承selenium自动化思想旨在 ...