用单例和HttpSessionBindingListener以及ajax轮询实现在线用户列表

本文介绍了一个基于Ajax轮询的在线实时聊天系统实现方法。通过单例模式管理在线用户列表,并利用HttpSessionBindingListener监听用户的登录与登出状态,确保用户上下线时能够及时更新在线用户列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

============================================================================

原创作品,允许转载。转载时请务必以超链接形式标明原始出处、以及本声明。

请注明转自:http://yunjianfei.iteye.com/blog/

============================================================================

 

前段时间在做在线实时聊天系统,做了不少相关的例子,最近工作比较清闲,就慢慢发上来吧,附件里的例子是一个用ajax轮询,以及单例模式的一个list来存放在线用户,用HttpSessionBindingListener来绑定新创建的用户,一个session销毁时,list也会更新

 

 

下面是单例模式的list

package com.yunfei.bean;

import java.util.ArrayList;  
import java.util.List;  
 
public class UserList  
{  
    private List list;  
 
    private static UserList instance = null;  
 
    // 以private的方式来声明构造方法,使得其他的类对象无法调用此类的构造函数  
    private UserList()  
    {  
        list = new ArrayList();  
    }  
 
    public static synchronized UserList getInstance()  
    {  
        if (instance == null)
        {  
            instance = new UserList();  
        }  
        return instance;  
    }  
 
    public void addUser(User u)  
    {  
        if (u != null)  
        {  
            list.add(u);  
        }  
    }  
 
    public void removeUser(User u)  
    {  
        if (u != null)  
            list.remove(u);  
    }  
 
    public List getList()  
    {  
        return list;  
    }  
}  

 

下面的javaBean实现了HttpSessionBindingListener

package com.yunfei.bean;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

public class User implements HttpSessionBindingListener {
 private int id;
 private String username;
 private String password;
 private User u;
 

 public User getU() {
  return u;
 }

 public void setU(User u) {
  this.u = u;
 }

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 private UserList userList = UserList.getInstance();

 public void valueBound(HttpSessionBindingEvent e) {
  System.out.println("addUser:  " + u.getUsername());
  userList.addUser(u);
  System.out.println(userList.getList());
 }

 public void valueUnbound(HttpSessionBindingEvent e) {
  System.out.println("RemoveUser:   " + u.getUsername());
  userList.removeUser(u);
  System.out.println(userList.getList());

 }

}

 

废话不多说了,详细的自己看代码吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值