监听器在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监听器的简单使用相关推荐

  1. java开启线程的方法_Java有几种方法开启线程?怎么实现带有返回值的线程?

    Java有几种方法开启线程?怎么实现带有返回值的线程? 发布时间:2020-05-22 11:20:08 来源:亿速云 阅读:238 作者:Leah Java有几种方法开启线程?怎么实现带有返回值的线 ...

  2. java入参为方法_Java命令注入原理结合Java Instrument技术(FreeBuf首发)

    一.前言 命令注入:恶意用户构造恶意请求,对一些执行系统命令的功能点进行构造注入,从而达到执行命令的效果. 二.演示环境搭建 这里采用springboot+swagger搭建一个模拟的web环境:启动 ...

  3. java的scanner的方法_Java Scanner reset()方法

    Java Scanner reset()方法 java.util.Scanner.reset() 方法重置该扫描仪.重设scanner 丢弃所有的这些可能已被useDelimiter(java.uti ...

  4. java日历类add方法_Java日历computeTime()方法及示例

    java日历类add方法 日历类computeTime()方法 (Calendar Class computeTime() method) computeTime() method is availa ...

  5. java日历类add方法_Java日历computeFields()方法及示例

    java日历类add方法 日历类的computeFields()方法 (Calendar Class computeFields() method) computeFields() method is ...

  6. java日历类add方法_Java日历setFirstDayOfWeek()方法与示例

    java日历类add方法 日历类setFirstDayOfWeek()方法 (Calendar Class setFirstDayOfWeek() method) setFirstDayOfWeek( ...

  7. java日历类add方法_Java日历setMinimalDaysInFirstWeek()方法与示例

    java日历类add方法 日历类setMinimalDaysInFirstWeek()方法 (Calendar Class setMinimalDaysInFirstWeek() method) se ...

  8. java定义一个eat方法_Java继承概念详细解读

    继承与合成基本概念 继承:可以基于已经存在的类构造一个新类.继承已经存在的类就可以复用这些类的方法和域.在此基础上,可以添加新的方法和域,从而扩充了类的功能. 合成:在新类里创建原有的对象称为合成.这 ...

  9. java加密常用的方法_JAVA MD5 加密常用 方法

    JAVA MD5 加密常用 方法 class="java"> public class MD5Util { private static char hexDigits[] = ...

最新文章

  1. ORACLE SQL: 经典查询练手第二篇
  2. 编码字典类特征、使用sklearn的DictVectorizer方法将字典组成的列表转换成向量、详解及实战
  3. 【基于深度学习的脑电图识别】数据集篇:脑电信号自动判读的大数据
  4. cad字体安装_浩辰CAD与AutoCAD兼容性测评大起底!
  5. 小米5 android 4.1.2,小米1刷机包 V5稳定版V1.2 流畅纯净 精简省电 默认开启未知来源 Android4.1.2...
  6. MAT分析器查看jvm dump文件
  7. 一文搞定Qt读写excel以及qt读写xml数据
  8. Command 传参的几种方式
  9. isfull mysql_MySQL数据库之MySQL 出现 The table is full 的解决方法
  10. Linux vi 行尾 ctrl,linux中vi使用技巧常用技巧和高级替换
  11. php发送http put/patch/delete请求
  12. 父进程给子进程传参数
  13. matlab斑点噪声算法,粒子滤波算法中的噪声问题
  14. GMSM —— 国密简介、概念(SM1-9)、ZUC祖冲之算法
  15. 阿里云服务器迁移内容
  16. 智能快递柜的密码模块
  17. 关于 Adobe PDF虚拟打印机
  18. 使用LM324实现信号放大及电压比较综合报警电路
  19. 定时器、Lambda表达式、Stream流
  20. Scrapy 爬取起点中文网存储到 MySQL 数据库(自定义 middleware)

热门文章

  1. igex h1z1一直显示服务器繁忙,在igxe网站上买h1z1的装备,取回steam库显示steam账号无法交易是怎么回事儿? 手机令牌我已经绑定7天了。...
  2. 当前提审小程序包中可能包含明文的AppSecret,解决办法
  3. Linux hook系统调用open/read/write
  4. Navicat如何导出数据字典
  5. 微众银行区块链承担科技部国家重点研发计划项目课题
  6. 高性能 XC6SLX25T-2CSG324C(FPGA)现场可编程门阵列
  7. 树莓派4正式发布!TYPE-C,USB3.0,支持4K双屏,售价35美金起
  8. [转载]AutoIT3 vs AutoHotkey
  9. vue 打印(模板套打)
  10. PANSS 阳性与阴性症状量表