多谢pinkcoco 还想请教下大家下,我在线用户可以统计出来,不过现在就是在销毁session时, list中的用户不知怎样移除(list中存放着是用户的对象UserVO )? public class OnlineUser implements HttpSessionAttributeListener{ private static List lt_user=new ArrayList();
public void attributeAdded(HttpSessionBindingEvent arg0) { // TODO Auto-generated method stub if("online_user_name".equals(arg0.getName())){ UserVO userInfo = new UserVO(); System.out.println("---用户名---"+arg0.getValue()); loginInfo.setUsername(arg0.getValue().toString()); lt_user.add(userInfo); // System.out.println("add在线用户人数:"+lt_user.size()); } } public void attributeRemoved(HttpSessionBindingEvent arg0) { // TODO Auto-generated method stub if("online_user_name".equals(arg0.getName())){ System.out.println("释放用户:"+arg0.getValue()); lt_user.remove(" ") //请问这里应该怎样移除用户????????? System.out.println("remove在线用户人数:"+lt_user.size()); } } public void attributeReplaced(HttpSessionBindingEvent arg0) { // TODO Auto-generated method stub } public static List getList(){ return lt_user; }
}
移除整个list不行吗?? 你不是把所有的用户放在一个list里了吗? 也就是说当用户登录进来以后拟通过Lister监听到以后 List onlineList = new ArrayList(); onlineList.add("每一次登录进来的用户"); HttpSession session = request.getSession(true);// session.setAttribute("online",onlineList); 因为之用加入到list里面的用户才为在线用户了~他要是下线的话,你直接在list中把它删除了不就行了啊~~ 通过list的remove方法删除元素,这样你就不用关session中的onlineList 了
<listener-class>
这里写你的Listener类名
</listener-class>
</listener>
Listener类需要扩展自HttpSessionBindingListenerimport javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;public class OnlineUsers implements HttpSessionBindingListener {
/**
* 对象实例(即OnlineUserListener的实例)作为一个属性被设置到session的
* 时候,会调用本方法,这种情况一般发生在点击登录按钮以后的处理过程中
* 设置
* @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
*/
public void valueBound(HttpSessionBindingEvent event) {
// TODO
} /**
* 当Session超时,或本实例被从session中移除的时候被调用,这种情况一般
* 发生在注销方法的处理过程中
* @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
*/
public void valueUnbound(HttpSessionBindingEvent event) {
// TODO
//event.getSession().invalidate();
}
}
还想请教下大家下,我在线用户可以统计出来,不过现在就是在销毁session时,
list中的用户不知怎样移除(list中存放着是用户的对象UserVO )?
public class OnlineUser implements HttpSessionAttributeListener{ private static List lt_user=new ArrayList();
public void attributeAdded(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
if("online_user_name".equals(arg0.getName())){
UserVO userInfo = new UserVO();
System.out.println("---用户名---"+arg0.getValue());
loginInfo.setUsername(arg0.getValue().toString());
lt_user.add(userInfo);
// System.out.println("add在线用户人数:"+lt_user.size());
}
} public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
if("online_user_name".equals(arg0.getName())){
System.out.println("释放用户:"+arg0.getValue());
lt_user.remove(" ") //请问这里应该怎样移除用户????????? System.out.println("remove在线用户人数:"+lt_user.size());
}
} public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
public static List getList(){
return lt_user;
}
}
你不是把所有的用户放在一个list里了吗?
也就是说当用户登录进来以后拟通过Lister监听到以后
List onlineList = new ArrayList();
onlineList.add("每一次登录进来的用户");
HttpSession session = request.getSession(true);//
session.setAttribute("online",onlineList);
因为之用加入到list里面的用户才为在线用户了~他要是下线的话,你直接在list中把它删除了不就行了啊~~
通过list的remove方法删除元素,这样你就不用关session中的onlineList 了