在线用户统计二

通过SessionListenr可以监听session的创建和销毁,所以首先要写一个类MySessionListener,实现javax.servlet.http.HttpSessionListener接口及其sessionCreated()、sessionDestroyed()方法:

import java.util.HashSet;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MySessionListener implements HttpSessionListener {

       public void sessionCreated(HttpSessionEvent event) {
              HttpSession session = event.getSession();
              ServletContext application = session.getServletContext();

              // 在application范围由一个HashSet集保存所有的session
              HashSet sessions = (HashSet) application.getAttribute("sessions");
              if (sessions == null) {
                     sessions = new HashSet();
                     application.setAttribute("sessions", sessions);
              }

              // 新创建的session均添加到HashSet集中
              sessions.add(session);
              // 可以在别处从application范围中取出sessions集合
     // 然后使用sessions.size()获取当前活动的session数,即为“在线人数”
       }

       public void sessionDestroyed(HttpSessionEvent event) {
              HttpSession session = event.getSession();
              ServletContext application = session.getServletContext();
              HashSet sessions = (HashSet) application.getAttribute("sessions");

              // 销毁的session均从HashSet集中移除
              sessions.remove(session);
       }
}

  然后再在web.xml中分别配置SessionListener和session超时时间(10分钟):

<listener>
    <listener-class>全路径MySessionListener</listener-class>
</listener>

  

<session-config>
    <session-timeout>10</session-timeout>
</session-config>

  最后在Jsp页面代码使用以下代码就可以实现当前在线人数统计输出:

.......
当前在线:
<%
HashSet sessions=(HashSet)application.getAttribute("sessions");
out.print(sessions.size());
%>
.......

  

转载自---------------http://blog.sina.com.cn/s/blog_64e467d60100v4mi.html

时间: 2024-10-03 17:32:43

在线用户统计二的相关文章

遇到的坑:在线用户统计的实现

我们用Redis去在存线用户的信息,当用户登陆了,我们就就往Redis写这条用户信息.同时用户每请求一次,我们就去更新在线用户的信息,更新该用户的最后在线的时间,同时删除过期用户的信息. 这样的话,还不能实时,为了能达到实时,我们在页面上加了一个js的定时器.每过1s(这个时间可以酌情设置) 往服务器端发送一个请求.删除过期用户,拉取当前在线的用户信息. 在这个拉取过程中,有个问题,我们发送请求的时候是带cookie的,这样的话,在服务器端会更新session的状态.也就是session永久不会

监听器实现案例----自定义session扫描器和统计在线用户人数及用户信息

一.案例一:自定义Session扫描器1.案例说明当一个Web应用创建的Session很多时,为了避免Session占用太多的内存,我们可以选择手动将这些内存中的session销毁,那么此时也可以借助监听器技术来实现.对于拿到 每个session 对象, 判断session的最后一次访问时间 与当前时间 的间隔是否超过 5 分钟, 如果超过就手动销毁 2.实现代码SessionScanner:session对象的监听器 MyTimerTask:定时器timer的任务对象 SessionScann

使用 Redis 统计在线用户人数

在构建应用的时候, 我们经常需要对用户的一举一动进行记录, 而其中一个比较重要的操作, 就是对在线的用户进行记录. 本文将介绍四种使用 Redis 对在线用户进行记录的方案, 这些方案虽然都可以对在线用户的数量进行统计, 但每个方案都有一些自己特有的操作, 并且各个方案的性能特征以及资源消耗也各有不同. 方案 1 :使用有序集合 每当一个用户上线时, 我们就执行 ZADD 命令, 将这个用户以及它的在线时间添加到指定的有序集合中: ZADD "online_users" <use

PHP统计在线用户数量

一段经典的php统计在线用户数量的代码,一起学习分享. <?php /**  * Created by PhpStorm.  * User: jifei  * Date: 15/11/24  * Time: 20:58  *  * 每分钟百万用户,实时统计最近15分钟在线用户总数  */ class OnlineUser { public $prefix_key = "online";//key前缀 public function __construct() { $this-&g

java web监听器统计在线用户及人数

在线用户使用HttpSessionListener监听器统计 每当一个session会话建立  在线用户人数+1 每当一个session会话销毁 在线用户人数-1 使用ServletRequestListener监听器统计用户信息 每当一个request建立  将当前用户放入集合 每当session会话销毁  将当前用户移出集合 我使用的是Servlet3.0  监听器直接使用注解@webListener即可 不用在web.xml中布局 在web.xml中配置session-timeout标签

用HttpSessionListener统计在线用户或做账号在线人数管理

使用HttpSessionListener接口可监听session的创建和失效 session是在用户第一次访问页面时创建 在session超时或调用request.getSession().invalidate()时失效 因此利用HttpSessionListener接口可方便的做到几个功能 1.统计在线用户 2.限定账号的同时登录个数 3.记录用户退出时间 以下是目前项目的代码,实现的是限定账号的同时登录个数 public class MySessionListener implements

Javaweb基础---&gt;利用监听器统计在线用户数量和用户信息

首页布局:index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*" %> <%@ page import="com.hanqi.model.*" %> <!DOCTYPE

【Listener】利用监听器Listener以MVC的思想通过JSP+Servlet+JDBC完成在线用户列表的输出

Servlet,监听器Listener与<[Filter]拦截器Filter>(点击打开链接)是JSP的三大核心组件,实际上监听器Listener相当于数据库里面的触发器,一旦用户触发了某种行为,则可以通过相关的Java文件执行相应的程序.用户在浏览网页的过程中,主要有打开浏览器的动作,对应的行为是Session的创建,可是,用户关闭浏览器的动作,并不是对应Session的消失,因此对于Session的消失我们意义不大:访问任意网页的动作,对应的行为是request请求的创建,request的

js-DOM ~ 04. BOM:浏览器对象模型window. 、定时器、在线用户、祝愿墙、BOM的内置方法内置对象

multiple. select列表多选 触发事件后调用有参数的函数要先创建一个函数,然后在函数内调用执行函数 Array.from(伪数组):伪数组变为真数组 indexOf():查询字符的索引 a)  indexOf('abcde') i.      indexOf('a')的索引是0 ii.      indexOf('abc')的索引是0,按照第一个字符的索引 iii.      indexOf('ac')的索引是-1,查找不到ac连续的字符 iv.      indexOf('f')的