Java 統計用戶是否在線狀態的代碼

jopen 11年前發布 | 13K 次閱讀 Java Java開發

統計登錄用戶是否在線,訪問某個人的空間時,如果空間主人在線,就可以看到他在線的狀態,適合多用戶互動型網站。

監聽器代碼:

import java.util.LinkedList;
import java.util.List;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

/**
 * Java 統計用戶是否在線狀態
*/
public class OnLineUserListener implements HttpSessionAttributeListener {

        /**
         * 存放在線用戶列表
         */
        public static List onLineUserList = new LinkedList();

        /**
         * 根據用戶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 文件添加監聽器

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!