日期:2014-05-20  浏览次数:20764 次

问一个关于session等的初级问题
各位大侠,小弟刚从asp.net转到java过来(公司需要),开发中遇到一点问题。就是在一个session结束后需要处理一些事务。例如在线人数统计,需要在一个session结束后去在线人数中去减一之类。如何处理?原来asp.net中在Global.ascx的中可以处理。那java呢?如何处理啊?查了资料,说用监听器?只能这样吗?

------解决方案--------------------
在web.xml中配置监听器。
------解决方案--------------------
只能通过监听session写监听器,你是想确认下?
这个东西挺好的,没用过.net
------解决方案--------------------
implements HttpSessionBindingListener

实现:
Java code
  public void valueUnbound(HttpSessionBindingEvent event)
  {
    //这里可以do那些人数减一的事.
  }

  public void valueBound(HttpSessionBindingEvent event)
  {
    //这里可以do那些人数加一的事.
  }

------解决方案--------------------
和上楼意见差不多 不过好像不说用的那两个方式 不知道他那个方法是干嘛的 和你的问题无关,
是创建SESSION 的时候+1 一般不配置是2小时就销毁了 销毁的时候-1
------解决方案--------------------
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class SessionListener implements HttpSessionListener {

// 在线人数计数器
public static int sessionCount = 0;
//用键值存在线用户 键为SessionId 值为 整个会话
public static Map users = new HashMap();

public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
users.put(session.getId(), session);
sessionCount++;
}

public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
users.remove(session.getId());
sessionCount--;
}

}