Java實現在線用戶顯示

 iLife's 博客http://blog.csdn.net/fei1502816 


OnlineUser

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

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


 

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>



 

發佈了30 篇原創文章 · 獲贊 16 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章