web在线用户简单实现

◆ 创建一个静态工厂类保存在线用户,示例代码如下:
public class OnlineUserManager{
private static ServletContext servletContext=null;
/*
* 在线用户集合
* String: 登录用户session id
* UserBean: 登录用户对象
*/
private static Map<String,UserBean> userListMap = new HashMap<String,UserBean>();
/*
* 每个账号同时在线的个数
* Long: 用户id
* Integer: 在线数量
*/
private static Map<Long,Integer> userOnlineCountMap = new HashMap<Long,Integer>();
/*
* 每个session id对应的消息列表,主要实现给某一个在线用户(对应的session id)发送消息
* String: session id
* List<MessageBean>: 消息列表
*/
private static Map<String,List<MessageBean>> userMessageMap = new HashMap<String,List<MessageBean>>();

//主要方法

//用户成功登陆后,将此用户添加到在线用户集合中
public static void addUser(UserBean user){
......
userListMap.put(user.getSessionId(),user);
......
}
//用户注销时,根据用户serssion id将此用户从在线用户集合中移除
public static void deleteUserBySessionId(String sessionId){
......
userListMap.remove(sessionId);
......
}

}

◆ 使用HttpSessionBindingListener
HttpSessionBindingListener介绍:
Session代表客户的会话过程,客户登录时,往 Session 中传入一个对象,即可跟踪客户的会话。
在 Servlet 中,传入 Session 的对象如果有一个实现 HttpSessionBindingListener 接口的对象(方便起见,此对象称为监听器),
则在传入的时候(即调用 HttpSession 对象的 setAttribute 方法的时候)
和移去的时候(即调用 HttpSession 对象的 removeAttribute 方法的时候或 Session Time out 的时候)
Session 对象会自动调用监听器的 valueBound 和 valueUnbound 方法
(这是 HttpSessionBindingListener 接口中的方法)。

public class HttpSessionBinding implements javax.servlet.http.HttpSessionBindingListener{
/**
* 將新的用戶添加到在線用戶集合中
*/
public void valueBound(javax.servlet.http.HttpSessionBindingEvent e) {
Wuser userSession = (Wuser)e.getSession().getAttribute(this.SESSION_USER_BEAN);
userSession.setSessionId(e.getSession().getId());
//將用戶添加到用戶在線List中
OnlineUserManager.addUser(userSession);
}
/**
* 將過期用戶從在線用戶集合中剔除
*/
public void valueUnbound(javax.servlet.http.HttpSessionBindingEvent e) {
OnlineUserManager.deleteUserBySessionId(e.getSession().getId());
}

◆ 在用户登录成功后执行request.getSession().setAttribute("HttpSessionBinding", new HttpSessionBinding()),触发HttpSessionBindingListener监听器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值