SpringMVC的在线人数统计监听器
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);}}
}
/*** 登录操作* @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;}
<listener> <listener-class>com.shenofusc.utils.SessionListener</listener-class></listener>
SpringMVC的在线人数统计监听器相关推荐
- linux服务器在线人数,servlet监听器实现在线人数统计源码实例
servlet监听器实现在线人数统计 一.准备知识 1.servlet:servlet是一种运行服务器端的Java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求 ...
- Java监听器实现网站在线人数统计
1.监听器定义 监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求.服务端的操作等.通过监听器,可以自动激发一些操作,比如监听在线的用户的数量. 2.常见的监听器 1)Ser ...
- 使用监听器Listener实现在线人数统计功能
使用监听器Listener实现在线人数统计功能 目录树及使用的文件 1.首先创建一个CountListener类实现HttpSessionListener接口,实现接口的两个方法:sessionCre ...
- java怎么快速创建监听类_java_利用java监听器实现在线人数统计,1.在工程中创建监听类SessionLi - phpStudy...
利用java监听器实现在线人数统计 1.在工程中创建监听类SessionListener 并且实现HttpSessionListener接口,代码如下 import javax.servlet.htt ...
- 利用HttpSessionListener实现网站在线人数统计功能
为什么80%的码农都做不了架构师?>>> 在网站中经常需要进行在线人数的统计.过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加1,然后当用户点击 ...
- html页面统计在线人数,统计在线人数couter
如何运用内置对象session和application对象实现统计在线人数 首先创建一个全局应用程序类Global.asax protected void Application_Start 这几 ...
- 快速学习-在线人数统计
第10章 在线人数统计 10.1 涉及的技术知识点 监听器 10.2 监听器 Listener用于监听JavaWeb程序中的事件. 例如:ServletContext.HttpSession.Serv ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(39)-在线人数统计探讨
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(39)-在线人数统计探讨 系列目录 基于web的网站在线统计一直处于不是很精准的状态!基本上没有一种方法可 ...
- php页面在线人数,也谈php网站在线人数统计
也谈php网站在线人数统计 function checkOnline($userid,$tempid=null) { $conn = connect(); //对于所有用户 //先设置自己为在线 $s ...
最新文章
- Java项目命名规范
- 小技巧—设置IIS禁止网站放下载电影文件
- Python 技术篇-容易被忽略的尾差问题
- MySQL之备份恢复
- 我们需要StringBuffer么?
- 【bzoj2238】Mst(树链剖分+线段树)
- django不修改数据库创外键_Django——model(建表,增删改查,外键,多对多)
- jzoj6316-djq的朋友圈【状压dp】
- spring 与 guice 的区别好玩的好法(转)
- python 获取二维数组所有元素
- 数据仓库与数据挖掘相关基础概念
- Alibaba内网内部资料真香 -Spring手册太全了,
- VScode 历史版本
- CentOS — 文本编辑器
- C语言程序设计学习笔记:P3-判断
- sql语句执行顺序及简单优化
- 从校招到自己投简历找公司的一名大学应届生
- python爬取豆瓣影评_【python爬虫实战】爬取豆瓣影评数据
- TCP协议的通讯流程
- 小黄车卖蜂蜜啦。。。
热门文章
- tomcat设置默认页面及端口更改
- ActiveMQ——如何监控ActiveMQ
- Vert.x(vertx) 实现TCP服务
- 细说内网横向工具WMIHACK
- 《王道2023》P360 T3 计数排序
- ecplise提示:“The selection cannot be launched, and there are no recent launches.”
- 【Spring】Bean生命周期
- Linux进程与线程
- vfp报表纸张设置_vfp9终结一直以来的打印纸张设置
- Ae效果控件快速参考:模糊和锐化