java統計在線狀態

import java.util.LinkedList;
import java.util.List;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;


/**
 * java統計用戶在線狀態
 * @author sunlightcs
 * 2011-6-26
 * http://hi.juziku.com/sunlightcs/
*/
public class OnLineUserListener implements HttpSessionAttributeListener {
	
	/**
	 * 存放在線用戶列表
	 */
	public static List<Integer> onLineUserList = new LinkedList<Integer>();

	
	/**
	 * 根據用戶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文件裏,這樣纔可以達到監聽的作用。
web.xml裏,加入的代碼如下:

<!-- 監聽用戶狀態   在線或離線 -->
<listener>
        <listener-class>com.xxx.util.OnLineUserListener</listener-class>                        
   </listener>
   
   
   <!--設置會話過期時間爲10分鐘   如果不設置,默認是30分鐘-->
<session-config>
     <session-timeout>10</session-timeout>
</session-config>

 

來源:http://www.juziku.com/wiki/2399.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章