JavaWeb--监听器

举报
Java的学习之路 发表于 2022/05/30 20:08:33 2022/05/30
【摘要】 @TOC 一、监听器的概念在讲解我们web应用的监听器之前,我们可以先来了解一下在现实生活中监听流程是怎么样的。现实生活中,监听器是指专门用来对其他对象身上发生的事件或者状态改变进行监听和相应处理的对象,当被监视的对象发生变化的时候,立即采取相应的行动那么在我们的应用中,监听器是什么呢?监听器是Servlet规范中定义的一种特殊类用来监听ServletContext、HttpSession和...

@TOC

一、监听器的概念

在讲解我们web应用的监听器之前,我们可以先来了解一下在现实生活中监听流程是怎么样的。
在这里插入图片描述
现实生活中,监听器是指专门用来对其他对象身上发生的事件或者状态改变进行监听和相应处理的对象,当被监视的对象发生变化的时候,立即采取相应的行动

那么在我们的应用中,监听器是什么呢?

监听器是Servlet规范中定义的一种特殊类

  • 用来监听ServletContext、HttpSession和ServletRequest等域对象的创建和销毁事件
  • 用来监听域对象的属性发生修改的事件
  • 可以在事件发生前、发生后做一些必要的处理
    在这里插入图片描述
    正式学习之前,我们先来看一下监听器有什么样的用途

二、监听器的用途

  • 统计在线人数和用户
  • 系统启动的时候加载初始化信息
  • 统计网站的访问量
  • 和Spring相结合

三、监听器的分类

我们知道在电视中,我们经常看到那些谍战片里面,有间谍会进行潜伏,然后放窃听器来进行监听,比如监听别人的电话等等。他们想要监听,肯定要先有监听的目标也就是被监听的对象,在web应用中就是request,session,servletContext等域对象,也被称为事件源。既然想要监听,肯定要借助一些工具来监听,不然怎么能进行监听,所以要有监听器,当我们监听的对象状态发生变化我们都可以监听到。但是如果他没有做事情,我们肯定也就监听不到任何的东西,在web应用中,方法调用,属性改变,状态改变等称为事件
在这里插入图片描述

接下来,我们就来正式的来学习监听器了。
Servlet规范中定义了9个监听器接口,可以用来监听ServletContext、HttpSession 和 ServletRequest 对象的生命周期和属性变化事件。

这些监听器接口都以listener结尾
监听器Listener按照监听的事件可以分成3大类

  • 1.监听对象创建和销毁的监听器
  • 2.监听对象中属性变更的监听器
  • 3.监听 HttpSession 中的对象状态改变的监听器

监听对象创建和销毁的监听器

事件源 监听器 监听器描述 创建和销毁方法 调用时机
ServletContext ServletContextListener 用于监听 ServletContext 对象的创建与销毁过程 void contextInitialized (ServletContextEvent sce) 当创建 ServletContext 对象时
void contextDestroyed (ServletContextEvent sce) 当销毁 ServletContext 对象时
HttpSession HttpSessionListener 用于监听 HttpSession 对象的创建和销毁过程 void sessionCreated (HttpSessionEvent se) 当创建 HttpSession 对象时
void sessionDestroyed (HttpSessionEvent se) 当销毁 HttpSession 对象时
ServletRequest ServletRequestListener 用于监听 ServletRequest 对象的创建和销毁过程 void requestInitialized (ServletRequestEvent sre) 当创建 ServletRequest 对象时
void requestDestroyed (ServletRequestEvent sre) 当销毁 ServletRequest 对象时

监听对象中属性变更的监听器

事件源 监听器 监听器描述 方法 调用时机
ServletContext ServletContextAttributeListener 用于监听 ServletContext 对象的属性新增、移除和替换 public void attributeAdded (ServletContextAttributeEvent scae)  当 ServletContext 对象中新增一个属性时
public void attributeRemoved (ServletContextAttributeEvent scae)  当删除 ServletContext 对象中的一个属性时
public void attributeReplaced (ServletContextAttributeEvent scae)  当 ServletContext 对象中的某个属性被替换时
HttpSession HttpSessionAttributeListener 用于监听 HttpSession 对象的属性新增、移除和替换 public void attributeAdded  (HttpSessionBindingEvent  hsbe)  当 HttpSession 对象中新增一个属性时
public void attributeRemoved (HttpSessionBindingEvent  hsbe) 当删除 HttpSession 对象中的一个属性时
public void attributeReplaced (HttpSessionBindingEvent  hsbe)  当 HttpSession 对象中的某个属性被替换时
HttpServletRequest ServletRequestAttributeListener 用于监听 HttpServletRequest 对象的属性新增、移除和替换 public void attributeAdded (ServletRequestAttributeEvent srae) 当 HttpServletRequest 对象中新增一个属性时
public void attributeRemoved (ServletRequestAttributeEvent srae) 当删除 HttpServletRequest 对象中的一个属性时
public void attributeReplaced (ServletRequestAttributeEvent srae) 当 HttpServletRequest 对象中的某个属性被替换时

监听HttpSession中的对象状态改变的监听器

Session 中的对象可以有多种状态:绑定到 Session 中、从 Session 中解除绑定、随 Session 对象持久化到存储设备中(钝化)、随 Session 对象从存储设备中恢复(活化)。

Servlet 规范中定义了两个特殊的监听器接口,用来帮助对象了解自己在 Session 中的状态:HttpSessionBindingListener 接口和 HttpSessionActivationListener 接口 ,实现这两个接口的类不需要进行注册。

事件源 监听器 监听器描述 方法 调用时机
HttpSession HttpSessionBindingListener 用于监听 JavaBean 对象绑定到 HttpSession 对象和从 HttpSession 对象解绑的事件 void  valueBound (HttpSessionBindingEvent event) 当对象被绑定(添加)到 HttpSession 对象中时
void  valueUnbound (HttpSessionBindingEvent event) 当对象从 HttpSession 对象中解除绑定(移除)时
HttpSessionActivationListener 用于监听 HttpSession 中对象活化和钝化的过程 void sessionWillPassivate (HttpSessionBindingEvent event) 当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被钝化之前
void  sessionDidActive (HttpSessionBindingEvent event) 当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被活化之后

注意:如果监听器是HttpSessionBindingLinstener,只有实现了这个监听器接口的对象存储到Session域的时候,才会触发绑定事件,但是一个类即使没有实现HttpSessionAttributeListener,那么当这个类的对象存储到Session域的时候,也是会触发事件

四、第一个监听器

步骤:

  • 1.创建一个实现监听器接口的类
  • 在这里插入图片描述
  • 2.进行注册
  • 可以使用web.xml进行注册在这里插入图片描述
  • 也可以用@WebListener注解来进行注册在这里插入图片描述
  • 注意:所有监听器的方法不需要我们去调用,服务器会进行调用。当某一个特殊事件发生的时候,服务器会自动调用在这里插入图片描述

五、实现在线人数统计

https://blog.csdn.net/qq_40241957/article/details/97906977?spm=1001.2014.3001.5506

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。