版权声明:本文为博主原创文章,未经博主允许不得转载。 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的长度就可以了。