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) { 
        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配置
[html]
<!– 設置網站訪問監聽器 –> 
    <listener>  
        <listener-class>  
             com.estone.www.aqjgws.util.bean.OnlineUserListener 
        </listener-class>  
    </listener> 

摘自 那年那月那天

發佈留言