JavaWeb Listener 监听器

1.Listener

监听器(Listener)是一种特殊的Java类,它可以用来监听Web应用程序中的事件,例如ServletContext、HttpSession和ServletRequest等的创建、销毁、修改等事件。

通过监听器,我们可以在特定的事件发生时执行一些自定义的代码,以实现对应用程序的控制和管理。

2.HttpSessionListener

HttpSessionListener是一个监听器接口,用于监听HttpSession对象的创建和销毁事件。

当Web应用程序启动时,容器会创建一个HttpSession对象,当用户关闭浏览器或Session过期时,容器会销毁该对象。在HttpSessionListener中,我们可以编写代码来实现用户登录、退出、Session超时等功能。

HttpSessionListener中常用的方法有以下两个:

sessionCreated(HttpSessionEvent event):当HttpSession对象被创建时,会触发该事件。

sessionDestroyed(HttpSessionEvent event):当HttpSession对象被销毁时,会触发该事件。

我们可以用HttpSessionListener来编写一个记录当前在线人数的程序:

1) 编写监听器代码

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class Listener01 implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext context = se.getSession().getServletContext();
        Integer count = (Integer)context.getAttribute("count");

        if(count!=null){
            context.setAttribute("count",count+1);
        }else{
            context.setAttribute("count", 1);
        }

    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext context = se.getSession().getServletContext();
        Integer count = (Integer)context.getAttribute("count");

        if(count!=null){
            context.setAttribute("count",count-1);
        }else{
            context.setAttribute("count", 0);
        }
    }
}

2)编写jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>



目前有<%= this.getServletConfig().getServletContext().getAttribute("count")  %>人在线

3)在web.xml中注册监听器


  Listener01

4)结果:

JavaWeb Listener 监听器_第1张图片

因为我用两个浏览器访问了这个网址,所有显示有两个人在线。

当我关闭其中一个浏览器后,还是显示有两个人在线。因为这里计算的是会话的个数。

而会话只有手动关闭(session.invalidate())或者会话超时或者关闭服务器后才会结束。

 

你可能感兴趣的:(web开发,java,服务器)