首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

web在线用户简略实现

2012-12-22 
web在线用户简单实现◆ 创建一个静态工厂类保存在线用户,示例代码如下:public class OnlineUserManager{pri

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监听器。

热点排行