IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Javaweb Listener监听器的简单应用:统计网站在线人数 -> 正文阅读

[Java知识库]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入门到实战


  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-30 08:33:07  更:2022-04-30 08:36:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:57:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码