Java实现在线用户显示
Java实现在线用户显示
OnlineUser
- package com.www.bjjssc.util;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.Map;
- import javax.servlet.http.HttpSession;
- import javax.servlet.http.HttpSessionBindingEvent;
- import javax.servlet.http.HttpSessionBindingListener;
- /**
- * 在线用户统计
- */
- public class OnlineUsers implements HttpSessionBindingListener {
- private Map<String, OnlineUser> users = new HashMap<String, OnlineUser>();
- private static OnlineUsers onlineUsers = new OnlineUsers();
- public static OnlineUsers getInstance() {
- return onlineUsers;
- }
- /**
- * @return
- */
- public Collection getUsers() {
- return users.values();
- }
- public void addUser(OnlineUser user) {
- users.put(user.getId(), user);
- }
- public void removeUser(String userId) {
- users.remove(userId);
- }
- /**
- * 对象实例(即OnlineUserListener的实例)作为一个属性被设置到session的
- * 时候,会调用本方法,这种情况一般发生在点击登录按钮以后的处理过程中 设置
- *
- * @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
- */
- public void valueBound(HttpSessionBindingEvent event) {
- // 现在暂时不需要额外处理,你可以在这里记录日志等
- }
- /**
- * 当Session超时,或本实例被从session中移除的时候被调用,这种情况一般 发生在注销方法的处理过程中
- *
- * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
- */
- public void valueUnbound(HttpSessionBindingEvent event) {
- try {
- HttpSession session = event.getSession();
- OnlineUser u = (OnlineUser) session.getAttribute("currentUser");
- System.out.println("删除用户:"+u.getName());
- this.removeUser(u.getId());
- } catch (RuntimeException e) {
- e.printStackTrace();
- // throw e;
- }
- }
- }
OnlineUserListener
- package com.www.bjjssc.util;
- import javax.servlet.http.HttpSessionEvent;
- import javax.servlet.http.HttpSessionListener;
- /**
- * 在线用户监听
- */
- public class OnlineUserListener implements HttpSessionListener {
- public void sessionCreated(HttpSessionEvent event) {
- OnlineUser u = new OnlineUser();
- System.out.println("你登录网站========="+u.getId());
- u.setName("---");
- u.setId(event.getSession().getId());
- event.getSession().setAttribute("currentUser",u);
- OnlineUsers.getInstance().addUser(u);
- }
- public void sessionDestroyed(HttpSessionEvent event) {
- System.out.println("删除用户:"+event.getSession().getAttribute("currentUser"));
- OnlineUsers.getInstance().removeUser(event.getSession().getId());
- }
- }
OnlineUsers
- package com.www.bjjssc.util;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.Map;
- import javax.servlet.http.HttpSession;
- import javax.servlet.http.HttpSessionBindingEvent;
- import javax.servlet.http.HttpSessionBindingListener;
- /**
- * 在线用户统计
- * author:
- */
- public class OnlineUsers implements HttpSessionBindingListener {
- private Map<String, OnlineUser> users = new HashMap<String, OnlineUser>();
- private static OnlineUsers onlineUsers = new OnlineUsers();
- public static OnlineUsers getInstance() {
- return onlineUsers;
- }
- /**
- * @return
- */
- public Collection getUsers() {
- return users.values();
- }
- public void addUser(OnlineUser user) {
- users.put(user.getId(), user);
- }
- public void removeUser(String userId) {
- users.remove(userId);
- }
- /**
- * 对象实例(即OnlineUserListener的实例)作为一个属性被设置到session的
- * 时候,会调用本方法,这种情况一般发生在点击登录按钮以后的处理过程中 设置
- *
- * @see javax.servlet.http.HttpSessionBindingListener#valueBound(javax.servlet.http.HttpSessionBindingEvent)
- */
- public void valueBound(HttpSessionBindingEvent event) {
- // 现在暂时不需要额外处理,你可以在这里记录日志等
- }
- /**
- * 当Session超时,或本实例被从session中移除的时候被调用,这种情况一般 发生在注销方法的处理过程中
- *
- * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
- */
- public void valueUnbound(HttpSessionBindingEvent event) {
- try {
- HttpSession session = event.getSession();
- OnlineUser u = (OnlineUser) session.getAttribute("currentUser");
- System.out.println("删除用户:"+u.getName());
- this.removeUser(u.getId());
- } catch (RuntimeException e) {
- e.printStackTrace();
- // throw e;
- }
- }
- }
web.xml配置
- <!-- 设置网站访问监听器 -->
- <listener>
- <listener-class>
- com.estone.www.aqjgws.util.bean.OnlineUserListener
- </listener-class>
- </listener>
评论暂时关闭