当前位置:编程学习 > 网站相关 >>

WEB系统统计当前访问系统的用户

这个文件用来记录用户 用户在线个数 以及用户名密码 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Set; 
 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
 
/** 
* @author heli 
*  
*/ 
public class OnlineUser { 
 
private static long online = 0; 
 
private static Map userNameMap = new HashMap();// 目前只提供在线用户中文名字 
             // 以后如果有需求可以考虑扩充 
 
private static Log log = LogFactory.getLog(OnlineUser.class); 
 
public static long getOnline() { 
 
return online; 
 

 
public static boolean userOnline(String memEName, String memCName) { 
log.debug("创建用户Session"); 
try { 
   log.debug("用户名为:" + memEName); 
   log.debug("userNameMap" + userNameMap); 
   if (userNameMap.containsKey(memEName)) { 
    log.debug("用户重复登陆"); 
    return false; 
   } else { 
    userNameMap.put(memEName, memCName); 
    return true; 
   } 
} catch (Exception e) { 
   log.error("将用户信息放入userNameMap失败,信息如下:" + e.getMessage()); 

log.debug("userNameMap" + userNameMap); 
 
return false; 

 
public static void raise() { 
 
online++; 
log.debug("当前在线用户个数" + online); 

 
public static void reduce() { 
 
online--; 
log.debug("当前在线用户个数" + online); 
 

 
public static void userOffline(String memEName) { 
// TODO 自动生成方法存根 
log.debug("清除用户信息"); 
try { 
   log.debug("用户注销 用户名为:" + memEName); 
   userNameMap.remove(memEName); 
} catch (Exception e) { 
   log.error("清除用户信息失败:" + e.getMessage()); 


 
public static void main(String arge[]) { 
System.out.println("+++++++++++++++=="); 
Map map = new HashMap(); 
map.put("1", "a"); 
map.put("2", "b"); 
map.put("3", "c"); 
map.put("4", "d"); 
map.put("5", "e"); 
Set set = map.keySet(); 
Iterator ito = set.iterator(); 
while (ito.hasNext()) 
   System.out.println(ito.next()); 

 
/** 
* @return userNameMap 
*/ 
public static Map getUserNameMap() { 
return userNameMap; 

 
/** 
* @param userNameMap 
*            要设置的 userNameMap 
*/ 
public static void setUserNameMap(Map userNameMap) { 
OnlineUser.userNameMap = userNameMap; 

 

 
这个用户用来实现对用户登陆,注销,以及session 过期用户的处理 
 
 
package com.yc.ycportal.userutil; 
 
/** 
* @author heli 
*  
*/ 
import javax.servlet.http.HttpSessionEvent; 
 
import javax.servlet.http.HttpSessionListener; 
 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
 
import com.yc.ycportal.user.User; 
import com.yc.ycportal.util.Constants; 
 
public class OnlineUserListener implements HttpSessionListener { 
 
private static Log log = LogFactory.getLog(OnlineUserListener.class); 
 
public void sessionCreated(HttpSessionEvent hse) { 
OnlineUser.raise(); 

 
public void sessionDestroyed(HttpSessionEvent hse) { 
User user = (User) hse.getSession().getAttribute(Constants.LONGIN_USER); 
if (user == null) 
   log.debug("捕获用户session注销操作,该用户为未登陆用户!"); 
else { 
   try { 
    OnlineUser.userOffline(user.getMember().getMemname()); 
   } catch (Exception e) { 
    log.error("清除在线用户信息时,捕获用户名出错,错误信息如下:" + e.getMessage()); 
   } 

OnlineUser.reduce(); 
 

 

 
 
为了完成整个功能还需要 在用户登陆的时候调用userOnline(String memEName, String memCName) 
 
用户注销的时候调用   public static void userOffline(String memEName) 以及session.invalidate()方法 
为了启动session监听需要在 web.xml中加入 
 
 
      <listener id="listener_11111111111111">  
        <listener-class>com.yc.ycportal.userutil.OnlineUserListener</listener-class> 
      </listener>  
   
 
查看当前系统访问用户个数jsp如下: 
 
<%@ page contentType="text/html;charset=gb2312" %> 
 
<%@ page import="java.util.*"%> 
<html> 
<head> 
<title>在线用户信息</title> 
<meta http-equiv="refresh" content="20"> 
</head> 
 
<body> 
<% 
 
Map map=com.yc.ycportal.userutil.OnlineUser.getUserNameMap(); 
out.println("目前已经登陆的用户如下:"); 
   out.println("<BR>"); 
Set set=map.keySet(); 
Iterator ito = set.iterator(); 
while(ito.hasNext()){ 
   String memName=""+ito.next(); 
   out.println("用户ID:"+memName); 
   out.println("           用户名:"+map.get(memName)); 
   out.println("<BR>"); 
 

 
out.print("当前访问系统的总人数为:"); 
out.print(com.yc.ycportal.userutil.OnlineUser.getOnline()); 
 
%> 
</body> 
</html> 
作者“ERDP技术架构”

补充:Web开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,