一、统计在线人数
1.监听器
- package com.logcd.listener;
- import javax.servlet.ServletContext;
- import javax.servlet.http.HttpSessionEvent;
- import javax.servlet.http.HttpSessionListener;
- public class SessionCounter implements HttpSessionListener {
- public void sessionCreated(HttpSessionEvent event) {
- ServletContext ctx = event.getSession( ).getServletContext( );
- Integer numSessions = (Integer) ctx.getAttribute("numSessions");
- if (numSessions == null) {
- numSessions = new Integer(1);
- }else {
- int count = numSessions.intValue( );
- numSessions = new Integer(count + 1);
- }
- ctx.setAttribute("numSessions", numSessions);
- }
- public void sessionDestroyed(HttpSessionEvent event) {
- ServletContext ctx = event.getSession( ).getServletContext( );
- Integer numSessions = (Integer) ctx.getAttribute("numSessions");
- if (numSessions == null) {
- numSessions = new Integer(0);
- }
- else {
- int count = numSessions.intValue( );
- numSessions = new Integer(count - 1);
- }
- ctx.setAttribute("numSessions", numSessions);
- }
- }
package com.logcd.listener; import javax.servlet.ServletContext; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class SessionCounter implements HttpSessionListener { public void sessionCreated(HttpSessionEvent event) { ServletContext ctx = event.getSession( ).getServletContext( ); Integer numSessions = (Integer) ctx.getAttribute("numSessions"); if (numSessions == null) { numSessions = new Integer(1); }else { int count = numSessions.intValue( ); numSessions = new Integer(count + 1); } ctx.setAttribute("numSessions", numSessions); } public void sessionDestroyed(HttpSessionEvent event) { ServletContext ctx = event.getSession( ).getServletContext( ); Integer numSessions = (Integer) ctx.getAttribute("numSessions"); if (numSessions == null) { numSessions = new Integer(0); } else { int count = numSessions.intValue( ); numSessions = new Integer(count - 1); } ctx.setAttribute("numSessions", numSessions); } }
说明:实现了HttpSessionListener定义的两个方法:sessionCreated()和sessionDestroyed()。这两个方法可以监听到当前应用中session的创建和销毁情况。
以下两种情况下就会发生sessionDestoryed(会话销毁)事件:
(1)执行session.invalidate()方法时。
(2)如果用户长时间没有访问服务器,超过了会话最大超时时间,服务器就会自动销毁超时的session。
<session-config> <session-timeout>1</session-timeout> </session-config>
时间单位是一分钟,并且只能是整数,如果是零或负数,那么会话就永远不会超时。
2.web.xml中配置
<listener> <listener-class>com.logcd.listener.SessionCounter</listener-class> </listener>
3.jsp调用
目前共有<span class="salient"> <%=application.getAttribute("numSessions")%> </span>人在线
二、统计注册人数
1.监听器
- package com.logcd.listener;
- import java.util.HashMap;
- import java.util.Map;
- import javax.servlet.ServletContext;
- import javax.servlet.http.HttpSession;
- import javax.servlet.http.HttpSessionBindingEvent;
- import javax.servlet.http.HttpSessionBindingListener;
- public class OnlineUserBindingListener implements HttpSessionBindingListener{
- private String userId;
- private String userName;
- public OnlineUserBindingListener(String userId,String username){
- this.setUserId(userId);
- this.setUserName(userName);
- }
- @SuppressWarnings("unchecked")
- public void valueBound(HttpSessionBindingEvent event) {
- HttpSession session = event.getSession();
- ServletContext application = session.getServletContext();
- // 把用户放入在线列表
- Map onlineUserList = (Map) application.getAttribute("onlineUserList");
- // 第一次使用前,需要初始化
- if (onlineUserList == null) {
- onlineUserList = new HashMap();
- application.setAttribute("onlineUserList", onlineUserList);
- }
- onlineUserList.put(this.userId, this.userName);
- }
- public void valueUnbound(HttpSessionBindingEvent event) {
- HttpSession session = event.getSession();
- ServletContext application = session.getServletContext();
- // 从在线列表中删除用户
- Map onlineUserList = (Map) application.getAttribute("onlineUserList");
- onlineUserList.remove(this.userId);
- }
- public String getUserId() {
- return userId;
- }
- public void setUserId(String userId) {
- this.userId = userId;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- }
package com.logcd.listener; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; public class OnlineUserBindingListener implements HttpSessionBindingListener{ private String userId; private String userName; public OnlineUserBindingListener(String userId,String username){ this.setUserId(userId); this.setUserName(userName); } @SuppressWarnings("unchecked") public void valueBound(HttpSessionBindingEvent event) { HttpSession session = event.getSession(); ServletContext application = session.getServletContext(); // 把用户放入在线列表 Map onlineUserList = (Map) application.getAttribute("onlineUserList"); // 第一次使用前,需要初始化 if (onlineUserList == null) { onlineUserList = new HashMap(); application.setAttribute("onlineUserList", onlineUserList); } onlineUserList.put(this.userId, this.userName); } public void valueUnbound(HttpSessionBindingEvent event) { HttpSession session = event.getSession(); ServletContext application = session.getServletContext(); // 从在线列表中删除用户 Map onlineUserList = (Map) application.getAttribute("onlineUserList"); onlineUserList.remove(this.userId); } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } }
说明:实现了HttpSessionBindingListener接口,接口中共定义了两个方法:valueBound()和valueUnbound(),分别对应数据绑定,和取消绑定两个事件。
所谓对session进行数据绑定,就是调用session.setAttribute()把HttpSessionBindingListener保存进session中。
HttpSessionListener只需要设置到web.xml中就可以监听整个应用中的所有session。HttpSessionBindingListener必须实例化后放入某一个session中,才可以进行监听。
从监听范围上比较,HttpSessionListener设置一次就可以监听所有session,HttpSessionBindingListener通常都是一对一的。
valueUnbound的触发条件是以下三种情况:
(1)执行session.invalidate()时。
(2)session超时,自动销毁时。
(3)执行session.setAttribute("onlineUserListener", "其他对象");或session.removeAttribute("onlineUserListener");将listener从session中删除时。
因此,只要不将listener从session中删除,就可以监听到session的销毁。
2.jsp调用
(1)login.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
- <%@ page import="com.logcd.listener.OnlineUserBindingListener"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme() + "://"
- + request.getServerName() + ":" + request.getServerPort()
- + path + "/";
- String userId = "2000090603";
- String userName = "LogCN";
- session.setAttribute(userId,userName);
- session.setAttribute("onlineUserBindingListener", new OnlineUserBindingListener(userId,userName));
- response.sendRedirect("counter.jsp");
- %>
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <%@ page import="com.logcd.listener.OnlineUserBindingListener"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; String userId = "2000090603"; String userName = "LogCN"; session.setAttribute(userId,userName); session.setAttribute("onlineUserBindingListener", new OnlineUserBindingListener(userId,userName)); response.sendRedirect("counter.jsp"); %>
(2)counter.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
- 注册用户<span class="salient"><%=((Map)application.getAttribute("onlineUserList")).size()%> </span> 人
发表评论
-
JSP页面参数转码
2010-05-13 15:33 978URLEncoder.encode(${model.games ... -
java日期格式
2010-05-06 15:39 714下面是SimpleDateFormat类中的格式代码符号 意义 ... -
Tomcat配置根目录默认页面
2009-08-25 16:22 3902方法一: 修改tomcat的server.xml(这种方法试过 ... -
解决小图片缓存问题
2009-08-20 11:41 1350解决小图片缓存问题 当修改jsp图片元素的时候 ... -
Tomcat详解
2009-08-14 11:34 694Tomcat详解 使用嵌入式 T ... -
框架中常用的jar包作用
2009-08-13 15:32 606commons-digester.jar Digester ...
相关推荐
使用JSP实现在线人数统计,显示但前的在线人数,但不提供在线聊天的功能
jsp统计在线人数.txt jsp统计在线人数.txt
JAVA jsp统计用户登录在线人数,JAVA jsp统计用户登录在线人数
用JSP程序来实现统计当前的在线人数,觉得好的话多推广推广
javaweb中实现在线人数和在线用户的统计。有源码。
JSP要想要实时的监控在线人数只能通过session监听来完成,当浏览器关闭的时马上触发事件让session值实时减1,本事例具有完整的JSP在线人数统计,访问次数,用eclipse工具打开或直接copy至Tomcat上就可以运行..
用于 jsp 页面统计访问人数 源码,适合于初学者
本代码的主要功能是jsp对数据库的操作,并且完成对对当前数据库的操作,显示在线人数!
在线人数统计程序(JSP)学习SESSION小示例
用jsp、servlet做的可以统计在线人数和注册人数
jsp 统计在线人数实例,是个完整的项目实例,部署即可查看效果! 通过使用:HttpSessionListener、HttpSessionBindingListener来实现. valueBound 方法登录触发。 valueUnbound 方法退出触发。
记录 在线 session 记录 同时 在线 人数 jsp java web
关于在线人数的统计,具体的使用请看里面的readme.txt
包括以下的在线统计 网站计数器 统计用户停留时间 统计实时在线人数 统计网站访问量 完全基于JSP,容易阅读容易应用。
+servlet+java 实现统计在线人数,在线用户.txt
count.jsp 统计在线人数
从维普上下下来的论文
jsp利用application统计在线人数的方法.docx
主要介绍了jsp利用application统计在线人数的方法,代码中备有较为详尽的注释便于理解,是比较实用的技巧,需要的朋友可以参考下
在线人数统计,包括监听器,JSP页面编写,以及统计方便的调用