一、session简单介绍
在做在线统计人数监听器前,需要先简单了解一下session。
        Session存储在服务器端,一般放置在服务器的内存中(为了高速存取),Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。
        服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。
二、注意事项
1、一个浏览器只能创建一个session对象,也就是说多用户会覆盖session。
2、同一用户不用浏览器登录,会产生多个session,这时候需要判断用户是否已登录,将新session替换就session。
三、实现部分
这里的在线人数统计主要继承了HttpSessionListener接口,它的两个方法能够对服务器session的创建以及销毁进行监听。
package com.shenofusc.utils;
import java.util.ArrayList;
import java.util.HashSet;
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class SessionListener implements HttpSessionListener {public void sessionCreated(HttpSessionEvent event) {HttpSession session=event.getSession();ServletContext context=session.getServletContext();//用set集合来存储session对象HashSet<HttpSession> sessionSet=(HashSet<HttpSession>) context.getAttribute("sessionSet");if(sessionSet==null){sessionSet=new HashSet<HttpSession>();context.setAttribute("sessionSet", sessionSet);}//这里主要是为了检验用户是否登录,登录的话强制移除该session,加入新sessionfor(HttpSession s : sessionSet){if(session.getAttribute("nickname")==s.getAttribute("nickname")){sessionSet.remove(s);}}sessionSet.add(session);//存储在线人数,利用了set集合不重复的特性,避免了重复登录context.setAttribute("lineCount", sessionSet.size());}//session的销毁监听public void sessionDestroyed(HttpSessionEvent event) {ServletContext context = event.getSession().getServletContext();if (context.getAttribute("lineCount") == null) {context.setAttribute("lineCount", 0);} else {int lineCount = (Integer) context.getAttribute("lineCount");if (lineCount < 1) {lineCount = 1;}context.setAttribute("lineCount", lineCount - 1);}HttpSession session = event.getSession();HashSet<HttpSession> sessionSet = (HashSet<HttpSession>)context.getAttribute("sessionSet");if(sessionSet!=null){sessionSet.remove(session);}}
}
Controller的方法
/*** 登录操作* @param request* @param email* @param password* @return*/@ResponseBody@RequestMapping(value="/toLogin")public int toLogin(HttpServletRequest request ,String email,String password) {User user=userService.login(email,password);if(user!=null){HttpSession session = request.getSession();   session.setAttribute("nickname", user.getNickname());  //将用户名存入sessionServletContext context = session.getServletContext();//打印在线人数System.out.println("在线人数:"+context.getAttribute("lineCount"));return 1;}return 0;}/*** 注销操作,不是销毁session,因此不会触发sessionDestroyed方法,需要我们自己实现移除session操作* @param session* @return*/@RequestMapping("/outLogin")public ModelAndView outLogin(HttpSession session) {ServletContext context = session.getServletContext();int lineCount = (Integer) context.getAttribute("lineCount");context.setAttribute("lineCount", lineCount - 1);HashSet<HttpSession> sessionSet = (HashSet<HttpSession>) context.getAttribute("sessionSet");if(sessionSet!=null){sessionSet.remove(session);}ModelAndView mv=new ModelAndView("login");return mv;}
最后记得要去web.xml里配置监听~
<listener>  <listener-class>com.shenofusc.utils.SessionListener</listener-class></listener>

SpringMVC的在线人数统计监听器相关推荐

  1. linux服务器在线人数,servlet监听器实现在线人数统计源码实例

    servlet监听器实现在线人数统计 一.准备知识 1.servlet:servlet是一种运行服务器端的Java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求 ...

  2. Java监听器实现网站在线人数统计

    1.监听器定义 监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求.服务端的操作等.通过监听器,可以自动激发一些操作,比如监听在线的用户的数量. 2.常见的监听器 1)Ser ...

  3. 使用监听器Listener实现在线人数统计功能

    使用监听器Listener实现在线人数统计功能 目录树及使用的文件 1.首先创建一个CountListener类实现HttpSessionListener接口,实现接口的两个方法:sessionCre ...

  4. java怎么快速创建监听类_java_利用java监听器实现在线人数统计,1.在工程中创建监听类SessionLi - phpStudy...

    利用java监听器实现在线人数统计 1.在工程中创建监听类SessionListener 并且实现HttpSessionListener接口,代码如下 import javax.servlet.htt ...

  5. 利用HttpSessionListener实现网站在线人数统计功能

    为什么80%的码农都做不了架构师?>>>    在网站中经常需要进行在线人数的统计.过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加1,然后当用户点击 ...

  6. html页面统计在线人数,统计在线人数couter

    如何运用内置对象session和application对象实现统计在线人数 首先创建一个全局应用程序类Global.asax   protected void Application_Start 这几 ...

  7. 快速学习-在线人数统计

    第10章 在线人数统计 10.1 涉及的技术知识点 监听器 10.2 监听器 Listener用于监听JavaWeb程序中的事件. 例如:ServletContext.HttpSession.Serv ...

  8. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(39)-在线人数统计探讨

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(39)-在线人数统计探讨 系列目录 基于web的网站在线统计一直处于不是很精准的状态!基本上没有一种方法可 ...

  9. php页面在线人数,也谈php网站在线人数统计

    也谈php网站在线人数统计 function checkOnline($userid,$tempid=null) { $conn = connect(); //对于所有用户 //先设置自己为在线 $s ...

最新文章

  1. Java项目命名规范
  2. 小技巧—设置IIS禁止网站放下载电影文件
  3. Python 技术篇-容易被忽略的尾差问题
  4. MySQL之备份恢复
  5. 我们需要StringBuffer么?
  6. 【bzoj2238】Mst(树链剖分+线段树)
  7. django不修改数据库创外键_Django——model(建表,增删改查,外键,多对多)
  8. jzoj6316-djq的朋友圈【状压dp】
  9. spring 与 guice 的区别好玩的好法(转)
  10. python 获取二维数组所有元素
  11. 数据仓库与数据挖掘相关基础概念
  12. Alibaba内网内部资料真香 -Spring手册太全了,
  13. VScode 历史版本
  14. CentOS — 文本编辑器
  15. C语言程序设计学习笔记:P3-判断
  16. sql语句执行顺序及简单优化
  17. 从校招到自己投简历找公司的一名大学应届生
  18. python爬取豆瓣影评_【python爬虫实战】爬取豆瓣影评数据
  19. TCP协议的通讯流程
  20. 小黄车卖蜂蜜啦。。。

热门文章

  1. tomcat设置默认页面及端口更改
  2. ActiveMQ——如何监控ActiveMQ
  3. Vert.x(vertx) 实现TCP服务
  4. 细说内网横向工具WMIHACK
  5. 《王道2023》P360 T3 计数排序
  6. ecplise提示:“The selection cannot be launched, and there are no recent launches.”
  7. 【Spring】Bean生命周期
  8. Linux进程与线程
  9. vfp报表纸张设置_vfp9终结一直以来的打印纸张设置
  10. Ae效果控件快速参考:模糊和锐化