当前位置:编程学习 > JAVA >>

Java实现在线用户显示

OnlineUser
[java]
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
[java]
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

 
[java]
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

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,