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

Java Web 購物車功能完整實現:Session + Map 實戰詳解

     編輯:Java 綜合教學

從零構建 Java Web 購物車:Servlet + Session + Map 核心邏輯全解析

購物車是電商系統核心模塊。本文通過完整代碼演示,詳細講解如何利用 HttpSession 存儲 Map<String, GoodsItem> 實現「加入購物車、數量疊加、頁面跳轉」核心流程,適合 Java Web 初學者快速掌握會話級狀態管理。

數據模型設計

// 商品實體
public class Goods {
    private String id;
    private String name;
    private double price;
    // getter/setter...
}

// 購物車項:商品 + 數量
public class GoodsItem {
    private Goods goods;
    private int count;
    public GoodsItem(Goods goods, int count) { ... }
    // getter/setter...
}

核心 Servlet:PutCarServlet


public class PutCarServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        // 1. 獲取商品 ID
        String id = request.getParameter("goodsID");
        
        // 2. 查詢商品完整信息
        GoodsDAO dao = new GoodsDAO();
        Goods g = dao.getGoodsByID(id);
        
        // 3. 從 Session 獲取或創建購物車 Map
        Map cart = 
            (Map) request.getSession().getAttribute("cart");
        if (cart == null) {
            cart = new HashMap();
        }
        
        // 4. 核心邏輯:已存在數量+1,否則新建項
        if (cart.containsKey(id)) {
            GoodsItem item = cart.get(id);
            item.setCount(item.getCount() + 1);  // 數量疊加
        } else {
            cart.put(id, new GoodsItem(g, 1));   // 新商品,數量=1
        }
        
        // 5. 更新 Session
        request.getSession().setAttribute("cart", cart);
        
        // 6. 重定向回商品列表繼續購物
        response.sendRedirect("index.jsp");
    }
}

關鍵技術點深度解析

技術點實現方式設計考量
會話隔離HttpSession 每用戶獨立天然支援多用戶並發,無需手動管理 Session ID
去重與疊加Map<商品ID, GoodsItem>Key 唯一性天然去重,Value 封裝數量實現疊加
狀態持久化Session 默認內存存儲生產環境建議改用 Redis/DB 持久化,支援集群與重啟不丟失
跳轉模式sendRedirect重定向避免表單重複提交,URL 顯示列表頁地址

前端調用示例

<!-- 商品列表頁 index.jsp -->
<c:forEach items="${goodsList}" var="goods">
    <tr>
        <td>${goods.name}</td>
        <td>${goods.price}</td>
        <td>
            <a href="PutCarServlet?goodsID=${goods.id}">加入購物車</a>
        </td>
    </tr>
</c:forEach>

運行效果演示

購物車添加效果

點擊「加入購物車」後,商品自動加入 Session 購物車,頁面跳轉回列表,用戶可繼續瀏覽。

擴展方向(生產級必備)

  • 購物車展示頁:遍歷 cart.values() 計算小計/總計
  • 數量修改/刪除:提供 UpdateCartServlet 處理 count 變更與 remove
  • 登錄合併:用戶登錄時將 Cookie/本地購物車合併到 Session
  • 分佈式 Session:Spring Session + Redis 實現集群共享
  • 庫存校驗:加入購物車/下單時實時扣減/鎖定庫存

完整項目結構參考


src/
├─ com.entity      // Goods, GoodsItem
├─ com.dao         // GoodsDAO (JDBC/MyBatis)
├─ com.servlet     // PutCarServlet, ListCartServlet...
└─ web/
   ├─ index.jsp
   ├─ cart.jsp
   └─ WEB-INF/web.xml

掌握「Session + Map」這一核心模式,你就擁有了構建有狀態 Web 應用的基石。建議動手敲一遍代碼,並在瀏覽器開發者工具 Application → Cookies → JSESSIONID 觀察 Session ID 傳遞機制,深化對 HTTP 無狀態協議如何通過 Session 實現有狀態交互的理解。

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