java统计在线人数_java实现在线人数统计
然后再配置监听,
web.xml配置:
1
2
com.test.OnlineUserListenerlistener-class>
3
listener>
一旦监听器发现调用了sessionDestoryed方法就会把其用户从在线人数中delete,在下面两种情况下会发生sessionDestoryed事件
a.执行session.invalidate()方法时
logout.jsp中调用了 session.invalidate()方法
b.session会话超时
session的默认超时事件是30分钟,30分钟后自动销毁session,这个时间也可以根据实际需要进行设置。
后来发现这种方式经常会出现数据丢失的情况,后来又发现通过实现HttpSessionBindingListener接口来实现,通过监听session的新建和销毁来控制也可以,具体方法如下:
HttpSessionBindingListener虽然叫做监听器,但使用方法与HttpSessionListener完全不同。我们实际看一下它是如何使用的。
新建类OnlineUserBindingListener,实现HttpSessionBindingListener接口,构造方法传入username参数,HttpSessionBindingListener内有两个方法valueBound(HttpSessionBindingEvent event)和valueUnbound(HttpSessionBindingEvent event),前者为数据绑定,后者为取消绑定
所谓对session进行数据绑定,就是调用session.setAttribute()把HttpSessionBindingListener保存进session中。
在login.jsp中做这一步:
01
02
03
04
05
request.setCharacterEncoding("UTF-8");
06
// 取得登录的用户名
07
String username = request.getParameter("username");
08
// 把用户名放入在线列表
09
session.setAttribute("onlineUserBindingListener", new OnlineUserBindingListener(username));
10
// 成功
11
response.sendRedirect("result.jsp");
12
%>
这就是HttpSessionBindingListener和HttpSessionListener之间的最大区别:HttpSessionListener只需要设置到web.xml中就可以监听整个应用中的所有session。HttpSessionBindingListener必须实例化后放入某一个session中,才可以进行监听。
从监听范围上比较,HttpSessionListener设置一次就可以监听所有session,HttpSessionBindingListener通常都是一对一的。
正是这种区别成就了HttpSessionBindingListener的优势,我们可以让每个listener对应一个username,这样就不需要每次再去session中读取username,进一步可以将所有操作在线列表的代码都移入listener,更容易维护。
HttpSessionBindingListener代码如下:
01
package com.test;
02
03
import java.util.ArrayList;
04
import java.util.List;
05
import javax.servlet.ServletContext;
06
import javax.servlet.http.HttpSession;
07
import javax.servlet.http.HttpSessionBindingEvent;
08
import javax.servlet.http.HttpSessionBindingListener;
09
10
public class OnlineUserBindingListenerimplements HttpSessionBindingListener {
11
String username;
12
13
public OnlineUserBindingListener(String username){
14
this.username=username;
15
}
16
public void valueBound(HttpSessionBindingEvent event) {
17
HttpSession session = event.getSession();
18
ServletContext application = session.getServletContext();
19
// 把用户名放入在线列表
20
List onlineUserList = (List) application.getAttribute("onlineUserList");
21
// 第一次使用前,需要初始化
22
if (onlineUserList ==null) {
23
onlineUserList =new ArrayList();
24
application.setAttribute("onlineUserList", onlineUserList);
25
}
26
onlineUserList.add(this.username);
27
}
28
29
public void valueUnbound(HttpSessionBindingEvent event) {
30
HttpSession session = event.getSession();
31
ServletContext application = session.getServletContext();
32
33
// 从在线列表中删除用户名
34
List onlineUserList = (List) application.getAttribute("onlineUserList");
35
onlineUserList.remove(this.username);
36
System.out.println(this.username +"退出。");
37
38
}
39
40
}
这里可以直接使用listener的username操作在线列表,不必再去担心session中是否存在username。
valueUnbound的触发条件是以下三种情况:
a.执行session.invalidate()时。
b.session超时,自动销毁时。
c.执行session.setAttribute("onlineUserListener", "其他对象");或session.removeAttribute("onlineUserListener");将listener从session中删除时。
因此,只要不将listener从session中删除,就可以监听到session的销毁。
java统计在线人数_java实现在线人数统计相关推荐
- Asp.Net MVC3.0网站统计登录认证的在线人数
前言 对于一个网站来说,统计在线人数是一个很重要的工作.平时也发现很多的网站论坛等都有在线人数的显示.对于一个网站如果在线人数很多,用户看到了这么个数字也是很了不起的事情.由于之前对于这个知识点只是知 ...
- java sleep方法_6种快速统计代码执行时间的方法,真香!(史上最全)
我们在日常开发中经常需要测试一些代码的执行时间,但又不想使用向 JMH(Java Microbenchmark Harness,Java 微基准测试套件)这么重的测试框架,所以本文就汇总了一些 Jav ...
- java中文章的阅读数统计
java中文章的阅读数统计 1.直接操作数据库进行增加操作存在问题 存在问题:每次请求都要update数据库,如果访问量大了之后,数据库存在操作压力,此时怎么办? 解决方法:1.提高数据库性能(横向/ ...
- java通过Excel 模板导出复杂统计类excel文档,在ruoyi前后端分离框架中的应用
Hello, 大家好! 我是不作死就不会死,智商不在线,但颜值超有品的拆家队大队长 --咖啡汪 一只不是在戏精,就是在戏精路上的极品二哈 前几天刚做了java通过Excel 模板导出复杂统计类exce ...
- JAVA毕设项目——新冠疫情统计系统
今天给大家分享的是[新冠疫情统计系统]属于JAVA毕设的一小类,肯定有很多同学都不是该如何学或者从哪开始下手,不过今天就会和同学们来一起学习一下--新冠疫情统计系统!!! Java实战项目--新冠疫情 ...
- java highchart统计图_java+highchart实现分类下钻柱形图
可视化展示中, 向下钻取的功能很常见. 这是有必要掌握的技能之一. 首先看官方示例. 第一层 点击第一个柱子向下钻取 实现这种图形展示, 关键点和难点在于数据格式的准备上. 通过查看示例代码, 可以看 ...
- java北京招聘_JAVA应届毕业生去北京找工作,薪资大约多少?
据调查显示,世界上有大约900万的Java开发人员.在了解Java工程师薪资之前,我们得知道Java工程师成长路线,因为在不同的阶段我们所需要的技能水平是不一样的. 一般Java工程师是按照如下路径发 ...
- java接口防_java接口如何有效防止恶意请求
解决方法: 1.在redis数据库db0中新建一个名为rd_sms_request_count表,表结构: Ip:客户请求的ip Success_count:成功次数 Failure_count:失败 ...
- java jstat 命令_Java命令-jstat
作用 jstat 工具用于检测到的 Java 虚拟机 (JVM) 的性能统计信息,比如GC.内存大小.编译时间等. 命令格式 jstat [ generalOption | outputOptions ...
最新文章
- 了解Android Matrix转换
- KubeDL 0.4.0 - Kubernetes AI 模型版本管理与追踪
- go 怎么等待所有的协程完成_Go 编程:如何实现协程调度的精准控制
- crontab 执行php脚本,为什么crontab没有执行我的PHP脚本?
- Minikube-运行在笔记本上的Kubernetes集群
- 博图帮助乱码解决方法
- Charles安装SSL证书失败问题
- 2021年全球与中国飞机导航镜行业市场规模现状及企业市场份额分析
- PCB板材及叠层结构(转)
- 计算机教研组活动简讯,思中信息技术组教研活动简报
- Spring|Spring知识点总结思维导图
- 微型真空气体采样泵气路的流导计算
- PROCAST-重力铸造分析流程
- iphone php环境,苹果(Mac OS X 10.5.6)下搭建php开发环境
- iscroll.js
- CDH 6.3.1 集成Atlas
- semantic-ui semantic.json配置
- 安卓还是鸿蒙,SaaS应用移动化靠谁?
- css中style怎么用,css中style标签的使用方法
- 北斗导航卫星公开服务信号频率
热门文章
- OptaPlanner
- 关于keras.sum()和kears.softmax()等函数中维度的理解
- Azure中配置网络安全组入站规则让外部网络访问VM中的网站
- java 包含文件_java 文件夹拷贝(文件夹里包含文件和文件夹) 代码
- allergro音乐术语什么意思_常见音乐术语(速度术语)
- H5:使用video标签在页面中插入视频
- 成功者的13个良好习惯
- c#股票接口源代码算法
- Qt widget事件传递顺序以及监听特定控件是否接收某个事件
- redhat linux rsh设置