监听器(Listener)

监听器(Listener)

什么是监听器

Listener监听器是Javaweb的三大组件之一, Javaweb的三大组件分别是servlet程序,filter过滤器,listener监听器。

Listener监听器类似于前端的事件绑定,java中的监听器用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等。

监听器的功能

监听事件发生,在事件发生前后能够做出相应处理的 web 应用组件。

Listener实现了 javax.servlet.ServletContextListener 接口的服务器端程序;随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。且并不是直接注册在事件源上,而是由 servlet 容器负责注册,开发只需在部署描述符中进行配置,servlet 容器会自动将监听器注册到事件源中。

主要作用是:做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。

监听器的分类及种类

按监听的对象划分

  1. ServletContext对象监听器
  2. HttpSession对象监听器
  3. ServletRequest对象监听器

按监听的事件划分

  1. 对象自身的创建和销毁的监听器
  2. 对象中属性的创建和消除的监听器
  3. session中的某个对象的状态变化的监听器

监听器的种类及每种监听器处理的事情

java中一共给我们提供了八个监听器接口,分别用于监听三个域对象,每个监听器都有专门监听的事件

Request

  1. ServletRequestListener (处理request对象创建和销毁)
  2. ServleRequestAttributeListener (处理域对象中的数据添加 替换 删除)

Session

  1. HttpSessionListener (处理session对象创建和销毁)
  2. HttpSessionAttributeListener 处理session域对象中的数据添加 修改删除)
  3. HttpSessionBindingListener (处理session对象监听器绑定和解绑定接口)
  4. HttpSessionActivationListener (处理session对象钝化和活化状态接口)

Application

  1. ServletContextListener (处理application对象创建和销毁)
  2. ServletContextAttributeListener (处理application域对象中的数据添加 修改 删除)

监听器的使用

两步走使用

  1. 定义监听器,根据需求实现对应接口
  2. 在web.xml中配置监听器,让监听器工作

例子:监听网站在线人数

  1. 定义监听器,根据需求实现对应接口,重写接口的方法
//统计网站在线人数监听器:一个用户对应一个session,则统计session的数量即可统计在线人数
public class OnlineCountListener implements HttpSessionListener {
    @Override
    //创建session的监听:一旦创建session,就会触发一次这个事件
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        ServletContext context = httpSessionEvent.getSession().getServletContext();
        Integer onlineCount = (Integer) context.getAttribute("OnlineCount");
        System.out.println(httpSessionEvent.getSession().getId());
        if (onlineCount == null) {
            onlineCount = new Integer(1);
        } else {
            int count = onlineCount.intValue();
            onlineCount = new Integer(count + 1);
        }
        context.setAttribute("OnlineCount", onlineCount);
    }

    @Override
    //销毁session的监听:一旦销毁session就会触发一次这个事件
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        ServletContext context = httpSessionEvent.getSession().getServletContext();
        Integer onlineCount = (Integer) context.getAttribute("OnlineCount");
        if (onlineCount == null) {
            onlineCount = new Integer(0);
        } else {
            int count = onlineCount.intValue();
            onlineCount = new Integer(count - 1);
        }
        context.setAttribute("OnlineCount", onlineCount);

    }
}
  1. 注册监听器:
<!--注册监听器-->
<listener>
    <listener-class>com.yue.listener.OnlineCountListener</listener-class>
</listener>

在前端页面显示在线人数:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  <h1>当前有<span style="color: brown"><%=application.getAttribute("OnlineCount")%></span>在线</h1>
  </body>
</html>
posted @   阿飞bean  阅读(448)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示