Java监听器的处理方法_Java监听器的简单使用
监听器在Java开发过程中发挥着重要作用,我们经常需要在系统刚一启动就要执行某些任务或进行某些操作,还有在统计当前在线用户数目时也需要使用监听器,因此有必要了解一下Java中监听器的使用过程和原理。
什么是Java监听器?
Java监听器就是一个程序,一个实现了特定接口的程序。
Java监听器的作用?
Java中监听器用于监听一个Java对象的方法调用或者属性的改变;当被监听的对象的某个方法被调用或者某个属性发生改变的时候,监听器中的某个方法就会被立即执行。
Java监听器简介
常用的监听器接口分为三类,分别是:
1.对Servlet上下文进行监听(Application级)
用于监听ServletContext对象的创建和删除以及属性的添加、删除、修改等操作,该监听器需要用到如下两个接口类:
(1)ServletContextAttributeListener
用于监听ServletContext(application)范围内属性的变化,实现该接口的监听器需要实现如下三个方法:
①attributeAdded(ServletContextAttributeEvent event):当程序把一个属性存入application范围时触发该方法;
②attributeRemoved(ServletContextAttributeEvent event):当程序把一个属性从application范围删除时触发该方法;
③attributeReplaced(ServletContextAttributeEvent event):当程序替换application范围内的属性时将触发该方法;
(2)ServletContextListener
当你需要在处理任何客户端请求之前进行某个操作,并且希望在整个应用过程中该操作一直可用,此时ServletContextListener接口将会起到作用,实现该接口的监听器需要实现的方法有:
①contextInitialized(ServletContextEvent event):当创建ServletContext时,激发该方法
②contextDestroyed(ServletContextEvent event):当销毁ServletContext时,激发该方法
2.对HTTP会话进行监听(Session级)
用于监听HTTP会话活动情况和HTTP会话中属性设置情况:包括session的创建和销毁,session中属性的增加、删除、修改等操作,也可以监听HTTP会话的active和passivate情况等,HTTP Session级的接口主要有:
(1)HttpSessionAttributeListener
该接口用于监听HttpSession(session)范围内属性的改变,实现该接口需要实现的方法有:
①attributeAdded(HttpSessionBindingEvent event):当在session中添加对象时触发此操作;
②attributeRemoved(HttpSessionBindingEvent event):当在session中删除对象时触发此操作;
③attributeReplaced(HttpSessionBindingEvent event):当在session中修改对象时触发此操作;
(2)HttpSessionListener
该接口用于监听session的创建和销毁过程,实现该接口的监听器需要实现的方法有:
①sessionCreated(HttpSessionEvent event):用户与服务器的会话开始、创建时时触发该方法 ;
②sessionDestroyed(HttpSessionEvent event):用户与服务器的会话断开、销毁时触发该方法 ;
(3)HttpSessionActivationListener
实现了HttpSessionActivationListener接口的JavaBean对象可以感知自己被活化和钝化的事件,主要方法有:
①sessionDidActive(HttpSessionBindingEvent event):当绑定到HttpSession对象中的对象将要随HttpSession对象被活化之后,web服务器调用该对象的此方法;
②sessionWillPassivate(HttpSessionBindingEvent event):当绑定到HttpSession对象中的对象将要随HttpSession对象被钝化之前,web服务器调用该对象的此方法;
(4)HttpSessionBindingListener
实现了HttpSessionBindingListener接口的JavaBean对象可以感知自己被绑定到Session中和从Session中删除的事件
①valueBound(HttpSessionBindingEvent event):当对象被绑定到HttpSession对象中时,web服务器调用该对象的此方法,从而对象被设置到session中;
②valueUnbound(HttpSessionBindingEvent event):当对象从HttpSession对象中解除绑定时,web服务器调用该对象的此方法,从而对象从session中被移除;
「说明」:一般情况下,HttpSessionActivationListener和HttpSessionBindingListener一起使用,这两个监听器比较特殊,实现这两个接口的类不需要在web.xml中进行注册,被钝化的JavaBean对象会被持久化到存储设备中,活化的JavaBean对象会被从存储设备中恢复,前提是该JavaBean对象实现了Serializable接口。
3.对客户端请求进行监听(request级)
用于监听用户的请求和request范围内属性的变化,该监听器需要实现的接口主要有:
(1)ServletRequestAttributeListener
用于监听request范围内属性的变化,实现该接口需要实现的方法有:
①attributeAdded(ServletRequestAttributeEvent event):当程序向request范围内添加属性时触发该方法
②attributeRemoved(ServletRequestAttributeEvent event):当程序在request范围内删除属性时触发该方法
③attributeReplaced(ServletRequestAttributeEvent event):当程序在request范围内的属性被替换或修改时触发该方法
(2)ServletRequestListener
①requestInitialized(ServletRequestEvent event):用户请求到达、被初始化时触发该方法;
②requestDestroyed(ServletRequestEvent sre):用户请求结束、被销毁时触发该方法。
Java监听器原理
Java监听器示例
监听器一般需要在web.xml中进行注册,如:
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
监听器Demo
demo.MyServletContextListener
Java代码如下:
package demo;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* @author -https://www.4spaces.org
*
*/
public class MyServletContextListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("----------------会话销毁---------------------");
}
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("-----------------会话创建------------------");
}
}
PS:完整代码下载地址:点我下载
Java监听器的处理方法_Java监听器的简单使用相关推荐
- java开启线程的方法_Java有几种方法开启线程?怎么实现带有返回值的线程?
Java有几种方法开启线程?怎么实现带有返回值的线程? 发布时间:2020-05-22 11:20:08 来源:亿速云 阅读:238 作者:Leah Java有几种方法开启线程?怎么实现带有返回值的线 ...
- java入参为方法_Java命令注入原理结合Java Instrument技术(FreeBuf首发)
一.前言 命令注入:恶意用户构造恶意请求,对一些执行系统命令的功能点进行构造注入,从而达到执行命令的效果. 二.演示环境搭建 这里采用springboot+swagger搭建一个模拟的web环境:启动 ...
- java的scanner的方法_Java Scanner reset()方法
Java Scanner reset()方法 java.util.Scanner.reset() 方法重置该扫描仪.重设scanner 丢弃所有的这些可能已被useDelimiter(java.uti ...
- java日历类add方法_Java日历computeTime()方法及示例
java日历类add方法 日历类computeTime()方法 (Calendar Class computeTime() method) computeTime() method is availa ...
- java日历类add方法_Java日历computeFields()方法及示例
java日历类add方法 日历类的computeFields()方法 (Calendar Class computeFields() method) computeFields() method is ...
- java日历类add方法_Java日历setFirstDayOfWeek()方法与示例
java日历类add方法 日历类setFirstDayOfWeek()方法 (Calendar Class setFirstDayOfWeek() method) setFirstDayOfWeek( ...
- java日历类add方法_Java日历setMinimalDaysInFirstWeek()方法与示例
java日历类add方法 日历类setMinimalDaysInFirstWeek()方法 (Calendar Class setMinimalDaysInFirstWeek() method) se ...
- java定义一个eat方法_Java继承概念详细解读
继承与合成基本概念 继承:可以基于已经存在的类构造一个新类.继承已经存在的类就可以复用这些类的方法和域.在此基础上,可以添加新的方法和域,从而扩充了类的功能. 合成:在新类里创建原有的对象称为合成.这 ...
- java加密常用的方法_JAVA MD5 加密常用 方法
JAVA MD5 加密常用 方法 class="java"> public class MD5Util { private static char hexDigits[] = ...
最新文章
- ORACLE SQL: 经典查询练手第二篇
- 编码字典类特征、使用sklearn的DictVectorizer方法将字典组成的列表转换成向量、详解及实战
- 【基于深度学习的脑电图识别】数据集篇:脑电信号自动判读的大数据
- cad字体安装_浩辰CAD与AutoCAD兼容性测评大起底!
- 小米5 android 4.1.2,小米1刷机包 V5稳定版V1.2 流畅纯净 精简省电 默认开启未知来源 Android4.1.2...
- MAT分析器查看jvm dump文件
- 一文搞定Qt读写excel以及qt读写xml数据
- Command 传参的几种方式
- isfull mysql_MySQL数据库之MySQL 出现 The table is full 的解决方法
- Linux vi 行尾 ctrl,linux中vi使用技巧常用技巧和高级替换
- php发送http put/patch/delete请求
- 父进程给子进程传参数
- matlab斑点噪声算法,粒子滤波算法中的噪声问题
- GMSM —— 国密简介、概念(SM1-9)、ZUC祖冲之算法
- 阿里云服务器迁移内容
- 智能快递柜的密码模块
- 关于 Adobe PDF虚拟打印机
- 使用LM324实现信号放大及电压比较综合报警电路
- 定时器、Lambda表达式、Stream流
- Scrapy 爬取起点中文网存储到 MySQL 数据库(自定义 middleware)
热门文章
- igex h1z1一直显示服务器繁忙,在igxe网站上买h1z1的装备,取回steam库显示steam账号无法交易是怎么回事儿? 手机令牌我已经绑定7天了。...
- 当前提审小程序包中可能包含明文的AppSecret,解决办法
- Linux hook系统调用open/read/write
- Navicat如何导出数据字典
- 微众银行区块链承担科技部国家重点研发计划项目课题
- 高性能 XC6SLX25T-2CSG324C(FPGA)现场可编程门阵列
- 树莓派4正式发布!TYPE-C,USB3.0,支持4K双屏,售价35美金起
- [转载]AutoIT3 vs AutoHotkey
- vue 打印(模板套打)
- PANSS 阳性与阴性症状量表