Java 统计用户是否在线状态的代码
jopen
11年前
统计登录用户是否在线,访问某个人的空间时,如果空间主人在线,就可以看到他在线的状态,适合多用户互动型网站。
监听器代码:
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>