您的位置:首页 > 其它

Listener监听在线用户数量

2016-04-19 17:06 357 查看
一、在web.xml中注册监听类

<listener>
<listener-class>
com.sasis.webapp.listener.OnLineUserListener
</listener-class>
</listener>

二、OnLineUserListener.java操作在线人数,实时更新数据库
package com.sasis.webapp.listener;

import java.sql.Timestamp;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

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

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.sasis.model.UserLoginLog;
import com.sasis.service.UserLoginLogManager;

public class OnLineUserListener implements HttpSessionListener {
public OnLineUserListener() {
}

private static Map onlineUsers = Collections.synchronizedMap(new HashMap(100));

public static int getCount() {
return onlineUsers.size();
}

public static Collection getOnlineUsers() {
return onlineUsers.values();
}

public static boolean isUserOnline(UserLoginLog userLoginLog) {
if (onlineUsers.containsKey(userLoginLog.getUserName())) {
return true;
}
return false;
}

public void deleteUser(UserLoginLog userLoginLog) {
onlineUsers.remove(userLoginLog.getUserName());
}

public static void addUser(UserLoginLog userLoginLog) {
onlineUsers.put(userLoginLog.getUserName(), userLoginLog);
}

public void sessionCreated(HttpSessionEvent hse) {

}
/**
sessionDestroyed()方法在两种情况下调用
1、web.xml中配置的过期时间,单位为min。过期调用
<session-config>
<session-timeout>200</session-timeout>
</session-config>
2、调用session.invalidate()触发
**/
public void sessionDestroyed(HttpSessionEvent hse) {
HttpSession session = hse.getSession();
UserLoginLog userLoginLog = (UserLoginLog) session.getAttribute("userLoginLog");
if (userLoginLog != null) {
deleteUser(userLoginLog);//在线用户集合中移除该用户
ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(session.getServletContext());
userLoginLog.setLoginOutTime(new Timestamp(new Date().getTime()));
UserLoginLogManager ullmgr = (UserLoginLogManager) ctx.getBean("userLoginLogManager");
ullmgr.updateUserLoginLog(userLoginLog);//实时的更新数据库用户登录状态
}
}

}
三、通过实现

通过实现HttpSessionListener的sessionCreated()方法可监听用户登录,将用户添加入在线用户集合

四、可用以下界面对在线用户进行展现



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Listener