為了方便日後複習與記錄成長,本文詳細記錄一個基於 Java Web 的購物車功能實作過程。核心需求:使用者可瀏覽商品、點擊加入購物車、系統自動處理重複商品數量累加,並將購物車資料存放於 Session 中。
首先建立商品表 goods,對應實體類 Goods(id、name、price 等欄位)。購物車項目對應 GoodsItem,包裝商品物件與購買數量。
處理「加入購物車」請求的完整邏輯如下:
public class PutCarServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String id = request.getParameter("goodsID"); // 取得商品編號
// 1. 從 DB 取得商品完整資訊
GoodsDAO dao = new GoodsDAO();
Goods goods = dao.getGoodsByID(id);
// 2. 從 Session 取得購物車
Map cart = (Map) request.getSession().getAttribute("cart");
if (cart == null) {
cart = new HashMap<>(); // 首次建立購物車
}
// 3. 判斷商品是否已在購物車
if (cart.containsKey(id)) {
// 已存在:數量 +1
GoodsItem item = cart.get(id);
item.setCount(item.getCount() + 1);
} else {
// 新商品:建立項目,數量設為 1
cart.put(id, new GoodsItem(goods, 1));
}
// 4. 更新 Session 並導回首頁繼續購物
request.getSession().setAttribute("cart", cart);
response.sendRedirect("index.jsp");
}
// doGet 直接轉交 doPost
}
Map 形式放入 Session,Key 為商品 ID,Value 為包含商品資訊與數量的 GoodsItem,查找與更新均為 O(1)。containsKey 判斷,存在則累加數量,否則新增,符合真實購物邏輯。sendRedirect 避免表單重複提交,回到商品列表頁。商品列表頁每個商品提供「加入購物車」連結或表單,指向 PutCarServlet?goodsID=xxx,點擊即觸發後端邏輯。
啟動伺服器,瀏覽商品頁點擊加入,可在 Session 中看到購物車資料結構正確,重複點擊同一商品數量正確遞增,功能完整可用。
本範例展示了 Java Web 經典購物車的核心實作:Servlet 處理請求、DAO 存取資料、Session 管理狀態、Map 高效存儲。後續可擴充:購物車頁面顯示、修改數量、刪除項目、結帳下單等流程。程式碼結構清晰,適合初學者參考與延伸。