当前位置: 首页 > news >正文

统计当前在线用户数量

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1、ServletContext记录个数

package cn.demo.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyServletContextListener implements ServletContextListener {

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		// 容器一启动ServletContext对象就会创建,该方法就会执行
		System.out.println("容器创建了...");
		ServletContext servletContext = sce.getServletContext();
		int count = 0;
		servletContext.setAttribute("count", count);
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// 容器销毁ServletContext对象就销毁,该方法就会执行
		System.out.println("容器销毁了...");

	}

}

web.xml配置
 
  <listener>
  	<listener-class>cn.demo.listener.MyServletContextListener</listener-class>
  </listener>

2、监听session创建

package cn.demo.listener;

import java.util.Date;

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

/**
 * 监听session个数
 * 
 */
public class MySessionListener implements HttpSessionListener {

	@Override
	public void sessionCreated(HttpSessionEvent se) {
		// 当服务器创建一个session的时候该方法执行
		System.out.println("session被创建了..." + se.getSession().getId() + "..." + new Date());
		ServletContext servletContext = se.getSession().getServletContext();
		int count = (Integer) servletContext.getAttribute("count");
		count++;
		servletContext.setAttribute("count", count);
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		System.out.println("session被销毁了..." + se.getSession().getId() + "..." + new Date());
		ServletContext servletContext = se.getSession().getServletContext();
		int count = (Integer) servletContext.getAttribute("count");
		count--;
		servletContext.setAttribute("count", count);
	}

}

web.xml
  <listener>
  	<listener-class>cn.itcast.listener.MySessionListener</listener-class>
  </listener>

3、页面显示

showSessionCount.jsp显示

<body>
	<h2 align="center">当前服务器session个数:${applicationScope.count}</h2>
</body>

转载于:https://my.oschina.net/bob1900/blog/803764

相关文章:

  • QT多线程类数组同时开启几十个线程
  • 实体ip 虚拟ip 固定ip 动态ip
  • 3 - Components
  • ceph 手工部署集群
  • 转载:align
  • codewars020: The Clockwise Spiral 数字顺时针螺旋矩阵
  • Servlet引擎Jetty之入门1
  • PHP SPL中提供了SplFileInfo和SplFileObject两个类来处理文件操作。
  • pg_dump实例详解(备份postgresql和greenplum数据库)
  • GATK使用说明(一)
  • linux应用之apache的源码安装(centos)
  • linux sudo 命令
  • 客户端Socket
  • 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别...
  • 画风清奇!盘点各编程语言中有趣的开源项目!
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • Angular 响应式表单 基础例子
  • github从入门到放弃(1)
  • HTTP中的ETag在移动客户端的应用
  • sessionStorage和localStorage
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Vue.js-Day01
  • Vue官网教程学习过程中值得记录的一些事情
  • XML已死 ?
  • 使用Gradle第一次构建Java程序
  • 我建了一个叫Hello World的项目
  • 一文看透浏览器架构
  • 06-01 点餐小程序前台界面搭建
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​人工智能书单(数学基础篇)
  • #数学建模# 线性规划问题的Matlab求解
  • (10)ATF MMU转换表
  • (ZT)一个美国文科博士的YardLife
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • ./和../以及/和~之间的区别
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .net反编译工具
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • :O)修改linux硬件时间
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @AutoConfigurationPackage的使用
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [android] 看博客学习hashCode()和equals()
  • [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算
  • [codevs] 1029 遍历问题
  • [IM] [Webhook] Webhook实现IM平台机器人
  • [ios] IOS文件操作的两种方式:NSFileManager操作和流操作【转】
  • [Java] 模拟Jdk 以及 CGLib 代理原理
  • [JS] node.js 入门
  • [leetcode 189][轮转数组]
  • [LeetCode]—Longest Palindromic Substring 最长回文子串
  • [luogu2165 AHOI2009] 飞行棋 (枚举)