Javaweb Listener监听器的简单应用:统计网站在线人数

Listener监听器实现统计网站在线人数

开发环境: IntelliJ IDEA

一、什么是监听器

是指专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生变化时,立即采取相应的行动。

具体参考下文:
Java监听器详解

二、创建并配置监听器

1.首先创建一个空的maven项目,在pom.xml配置文件中导入下面这几个包:

<dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>


        <!--连接数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

maven的一个优点:自动帮你从网上下载你需要的jar包

这几个包可能在本篇博客中不会有什么关联,但它们是javaweb项目中经常使用到的jar包

2.在src/java目录下创建包和类(自行命名),比如我的命名是:

包:cn.edu.xit.listener
类:OnlineCountListener

OnlineCountListener这个类就是监听器

package cn.edu.xit.listener;

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

//统计网站在线人数:统计session
public class OnlineCountListener implements HttpSessionListener {
    //创建session监听: 看你的一举一动
    //一旦创建一个session,就会触发一次这个
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        //要想统计session,作用域要提到最高
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        System.out.println(httpSessionEvent.getSession().getId());
        Integer onlinecount= (Integer) servletContext.getAttribute("OnlineCount");

        if(onlinecount==null){
            onlinecount = new Integer(1); //用int也行,这里用的是封装整型类的操作,等价于onlinecount = 1;
        }else{
            int count = onlinecount.intValue();
            onlinecount = new Integer(count+1); //等价于 onlinecount += 1;
        }
        //每次都在更新自己,有累加
        servletContext.setAttribute("OnlineCount", onlinecount);
    }
    //销毁session监听
    //一旦session销毁,就会触发
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        Integer onlinecount= (Integer) servletContext.getAttribute("OnlineCount");

        if(onlinecount==null){
            onlinecount = new Integer(0);
        }else{
            int count = onlinecount.intValue();
            onlinecount = new Integer(count-1);
        }
        //每次都在更新自己,有累加
        servletContext.setAttribute("OnlineCount", onlinecount);

    }
}

  1. 在web.xml中配置监听器
 <!--注册监听器-->
    <listener>
        <listener-class>cn.edu.xit.listener.OnlineCountListener</listener-class>
    </listener>

  <!--  <session-config>  session一分钟过期
        <session-timeout>1</session-timeout>
    </session-config>-->

三、观察访问网站的id

上面这些操作都完成之后,就可以在jsp里面测试了。

这里注意,在创建空的maven项目的时候可能会没有webapp文件夹,所以可以右击项目,点击Add FrameWork Support,选择Web Application,就可以创建web文件夹。

把maven自带的index.jsp稍加修改

<%--
  Created by IntelliJ IDEA.
  User: 86152
  Date: 2022/4/28
  Time: 12:23
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <h1>当前有 <span><%=this.getServletConfig().getServletContext().getAttribute("OnlineCount")%></span>人在线</h1>
  </body>
</html>

jsp写完之后,就可以启动tomcat测试了。

我们来看测试结果:

在这里插入图片描述

测试结果显示此网站有2人在线,这是为什么呢?
我们来看看这2个“人”的id

在这里插入图片描述
在页面控制台这里看到的只有一个id,那么另一个id是怎么来的?

因为服务器在访问网站的时候,一般会进行不止一次的连接才能访问成功,所以才会出现有多个id的情况。当我们让tomcat重新发布项目的时候,这个无用的id就会消失了。

然后这个时候我们用不同的客户端(浏览器)访问这个网站试试

在这里插入图片描述

在这里插入图片描述

我分别用了Microsoft Edge和FireFox两个浏览器来访问网站,观察到,人数在递增,id也不一样。

最后看一下后端控制台

在这里插入图片描述
这里我们可以看到,那个没用的id被记录下来了:

7F9E3977763B5B0E328283480B3B7D75

按我这个情况,可以解读为:第一个id尝试连接网站,但是失败,直到第二个id访问的时候才成功。

以上的来源是学习狂神说Java的视频:

【狂神说Java】JavaWeb入门到实战


  • 3
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BeJav

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值