Java 统计用户是否在线状态的代码

jopen 10年前

统计登录用户是否在线,访问某个人的空间时,如果空间主人在线,就可以看到他在线的状态,适合多用户互动型网站。

监听器代码:

import java.util.LinkedList;  import java.util.List;  import javax.servlet.http.HttpSessionAttributeListener;  import javax.servlet.http.HttpSessionBindingEvent;    /**   * Java 统计用户是否在线状态  */  public class OnLineUserListener implements HttpSessionAttributeListener {                    /**           * 存放在线用户列表           */          public static List onLineUserList = new LinkedList();            /**           * 根据用户ID,查询用户是否在线           * @param userId  用户ID           * @return  true:表示用户在线   false:表示用户离线           */          public static boolean findUserOnLine(Integer userId){                  return onLineUserList.contains(userId);          }                      /**           * 用户登录时候,把用户的信息存到userSession里       * UserSession类的结构很简单,只有userId,userName两个属性           */          @Override          public void attributeAdded(HttpSessionBindingEvent se) {                  if ("userSession".equals(se.getName())){                          /**                           * 用户上线的话,把用户的ID,添加到onLineUserList里                           */                          Integer userId = ((UserSession)se.getValue()).getUserId();                          onLineUserList.add(userId);                          System.out.println("用户ID:"+userId + " 上线了");                  }          }            @Override          public void attributeRemoved(HttpSessionBindingEvent se) {                  if ("userSession".equals(se.getName())){                          /**                           * 用户下线的话,把用户的ID,从onLineUserList中移除                           */                          Integer userId = ((UserSession)se.getValue()).getUserId();                          onLineUserList.remove(userId);                          System.out.println("用户ID:"+userId + " 下线了");                  }          }            @Override          public void attributeReplaced(HttpSessionBindingEvent se) {                  // TODO Auto-generated method stub          }            }

往 web.xml 文件添加监听器

<!– 监听用户状态   在线或离线 –>
<listener>
        <listener-class>com.xxx.util.OnLineUserListener</listener-class>                        
   </listener>
   <!–设置会话过期时间为5分钟   如果不设置,默认是30分钟–>
<session-config>
     <session-timeout>5</session-timeout>
</session-config>