首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java HttpSession 實現 QQ 空間訪問記錄功能

     編輯:Java 相關知識

功能演示

  • 首頁展示 QQ 列表,點擊進入空間詳情。
  • 側邊欄即時顯示「最近訪問記錄」(最多 3 條,最新在前)。
  • 支持 Cookie 禁用場景下的 URL 重寫降級方案。

核心類設計

1. 數據模型 QQS

public class QQS {
    private static LinkedHashMap qqs = new LinkedHashMap<>();
    static {
        qqs.put(10001, "張三"); qqs.put(10002, "李四"); ...
    }
    public static LinkedHashMap getQqs() { return qqs; }
}

2. 列表頁 Servlet (ListServlet)

  • 從 Session 獲取 history 屬性(逗號分隔的 QQ 號字符串)。
  • 解析並反查 QQS 顯示姓名。
  • 生成帶參數鏈接:/store?num=10001。

3. 記錄頁 Servlet (StoreQQServlet)

// 核心邏輯:LinkedList 維護有序、去重、固定長度(3)的訪問隊列
LinkedList list = new LinkedList<>(Arrays.asList(history.split(",")));
if (list.contains(num)) list.remove(num); // 去重
list.addFirst(num);                       // 置頂
if (list.size() > 3) list.removeLast();   // 截斷
session.setAttribute("history", String.join(",", list));

Session 過期與配置

  • 默認 30 分鐘無操作失效。
  • web.xml 配置:<session-timeout>2</session-timeout>(單位:分鐘)。

Cookie 禁用應對:URL 重寫

當瀏覽器拒絕 Cookie,JSESSIONID 無法傳遞,導致 Session 失效。解決方案:對所有頁面 URL 調用 response.encodeURL()(超鏈接)或 encodeRedirectURL()(重定向),自動附加 ;jsessionid=xxx。

// ListServlet 中
String url = response.encodeURL("/store?num=" + num);

// StoreQQServlet 中
response.sendRedirect(response.encodeRedirectURL("/list"));

總結

本例完整演示了 Session 存儲會話狀態、LinkedList 實現 LRU 訪問記錄、URL 重寫解決無 Cookie 環境下的會話追蹤,是 Java Web 會話管理的經典教學案例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved