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" %>

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

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

<listener>
  <listener-class>Listener01</listener-class>
</listener>

4)结果:

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

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值