找到一个用户类继承 ,HttpSessionBindingListener 这样在
显示 方法
private OnlineUserList ul = OnlineUserList.getInstance();//定义的在线人数列表类
public void valueBound(HttpSessionBindingEvent arg0) {//数据绑定
ul.addUser(this.name);
}
public void valueUnbound(HttpSessionBindingEvent arg0) {//取消绑定
ul.removeUser(this.name);
}
public OnlineUserList getUl() {
return ul;
}
public void setUl(OnlineUserList ul) {
this.ul = ul;
}
实际上
所谓对session进行数据绑定,就是调用session.setAttribute()把HttpSessionBindingListener保存进session中。
从监听范围上比较,HttpSessionListener设置一次就可以监听所有session,HttpSessionBindingListener通常都是一对一的。
正是这种区别成就了HttpSessionBindingListener的优势,我们可以让每个listener对应一个username,这样就不需要每次再去session中读取username,进一步可以将所有操作在线列表的代码都移入listener,更容易维护。
public class OnlineUserList {
private static final OnlineUserList userList=new OnlineUserList();
private Vector<String> v;
public int count = 0;
private OnlineUserList() {
v=new Vector<String>();
}
public static OnlineUserList getInstance()
{
return userList;
}
public void addUser(String name)
{
if(name!=null)
v.addElement(name);
}
public void removeUser(String name)
{
if(name!=null)
v.remove(name);
}
public Enumeration<String> getUserList() {
return v.elements(); }
public int getUserCount() {
return v.size();
}
}