查看在线人员和数量的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuliqi0429/article/details/47681553


转载请注明出处!!

首先定义一个全局静态变量,变量类型为List<Map<String,Object>> 。

然后在系统登录处获取当期登录者的信息,然后保存到这个全局变量中。

public static List<Map<String, Object>> maps = new ArrayList<>();

Map<String, Object> map = new HashMap<>();
map.put("用户名", username);
map.put("部门名", deptname);
map.put("部门编号", deptcode);
maps.add(map);

然后利用sessionListenner中session的sessionDestroyed的方法来从全局变量中移除当前用户的信息。

package com.supermap.landtax.web.session;

import java.util.HashSet;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import com.supermap.landtax.web.action.frame.LoginAction;

public class SessionListener implements HttpSessionListener{

	@Override
	public void sessionCreated(HttpSessionEvent event) {
	
     }
	
	@Override
	public void sessionDestroyed(HttpSessionEvent event) {
		 HttpSession session = event.getSession();
		 String username = null;
 		try {
 			username = session.getAttribute("username").toString();
 		} catch (Exception e) {
 		}
 		List<Map<String, Object>> maps=LoginAction.maps;
 		if (username != null && !("".equals(username))) {
 			for (int i = 0; i < maps.size(); i++) {
 				Map<String, Object> map = maps.get(i);
 				if (username.equals(map.get("username"))) {
 					maps.remove(map);
					break;
 				}
 			}
 		}
	}
}

此处会有一个小问题就是同一个用户不同计算机 登陆会出项两个一样的用户存在,所以在登陆的地方要加上一部分代码。也就是在保存新的之前先将之前存在的相同用户要移除掉。


if (username != null && !("".equals(username))) {
	for (int i = 0; i < maps.size(); i++) {
	 	Map<String, Object> map = maps.get(i);
	 	if (username.equals(map.get("username"))) {
	 		maps.remove(map);
			break;
	 	}
	 }
}



下面就是获取再线人数和具体再线的人员了,循环这个list并把list中的每个map中的信息查出来并显示就可以了。

在线人数就是直接去这个list的长度就可以了。


猜你喜欢

转载自blog.csdn.net/yuliqi0429/article/details/47681553