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: 86152Date: 2022/4/28Time: 12:23To 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入门到实战


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

  1. servlet使用监听器统计网站在线人数

    创建监听器,主要用到session和request,所以,自定义监听器类要实现HttpSessionListener和ServletRequestListener接口: package com.lzx ...

  2. Listener(监听器)的简单介绍

    Listener(监听器)的作用和内部机制 作用:监听某个事件的发生,状态的改变 内部机制:接口回调 八个web监听器 实现监听: 创建类实现监听器接口 web.xml文件中配置(注册)监听器< ...

  3. 使用监听器实现一个统计网站在线人数的示例

    (1)创建一个监听器实现类 要大致统计一个网站的在线人数,首先,可以通过ServletContextListener监听,当Web应用上下文启动时,在ServletContext中添加一个List,用 ...

  4. 用java统计网站在线人数

    下面,我们利用HttpSessionBindingListener接口Java语言,编写一个在线人数统计的程序.当一个用户登录后,显示欢迎信息,同时显示出当前在线的总人数和用户名单.当一个用户退出登录 ...

  5. 监听器应用【统计网站人数、自定义session扫描器、踢人小案例】

    2019独角兽企业重金招聘Python工程师标准>>> 从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器.这篇博文主要讲解的是监听器的应用. 统计网站在线人数 分 ...

  6. 12-监听器实现统计网站当前在线人数

    在 javaweb 项目中,利用监听器,实现统计网站当前在线人数 1.新建一个实现 HttpSessionListener 接口的实现类 OnlineCountListener.java packag ...

  7. Session实现网站在线人数统计

    Session统计网站在线人数 模仿一个B站左下角的人数在线统计: 1.实现一个Session监听器的接口,里面重写了俩个方法,一个是获取Session的方法,一个是销毁Session的方法.   2 ...

  8. Listener(监听器)详解

    Listener(监听器)详解 作用:监听某个事件的发生,状态的改变 内部机制:接口回调 监听器用于监听Web应用中某些对象的创建.销毁.增加,修改,删除等动作的发生,然后作出相应的响应处理.当监听范 ...

  9. 利用Servlet监听器实现简单网站访问量和在线人数统计

    转自 http://blog.sina.com.cn/s/blog_621a42970100gblw.html Servlet监听器主要有三种,在ServletContext(上下文对象).Sessi ...

最新文章

  1. SAP RETAIL 初阶之使用事务代码WRFMATCOPY创建商品主数据
  2. eigen跟踪MILTracker代码分析
  3. 【01】网页中清除历史浏览记录能不能彻底删除浏览记录?
  4. sublime text 2中Emmet8个常用的技巧
  5. android搜索功能xml,Android_Android ActionBar搜索功能用法详解,本文实例讲述了Android ActionBar - phpStudy...
  6. 在jsp中对mysql数据库分页的方法
  7. 情人节海报psd分层模板|好的图层,任你选择
  8. apple苹果IOS内购申请教程协议、税务和银行业务配置
  9. 8051单片机Proteus仿真与开发实例-74HC573锁存器驱动仿真
  10. 【MySQL练习案例】
  11. 3.tensorflow单层神经网络mnist数字识别:训练,加载模型,预测图像
  12. macos支持exfat吗_你需要黑苹果吗?
  13. 基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]
  14. 大学老师必备!30余个学术资源网站速收藏(附链接)
  15. ListView分页(带图片)显示用法案例。。。下
  16. Excel下的数据挖掘:学生成绩统计分析实战之前言
  17. 【BP回归预测】基于matlab随机蛙跳算法SFLA优化神经网络数据回归预测【含Matlab源码 2272期】
  18. 《实用软件工程》导图总结
  19. 历经重重严密检查终于成功返京,回来了!
  20. Excel如何遍历提取文件夹目录的操作?

热门文章

  1. [Nacos] 业务实例如何指定IP注入Nacos
  2. 【并发编程】如何用 Channel 解决并发问题?
  3. html页面的text用法,js中innerHTML,innerText,outerHTML用法总结
  4. Smart3D,CCC软件制作三维模型快速筛选出重点区域或大面积项目分割建模方法
  5. 吴思进—复杂美创始人首席执行官
  6. Photoshop滤镜打造线框特效美术字(转)
  7. ReLU激活函数的快速介绍
  8. linux初学者-MariaDB图形管理篇
  9. SYN Cookies 技术
  10. C语言常见问题(6):declaration shadows a local variable