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

JSP 購物車展示商品:Servlet 查詢 → Request 轉發 → JSTL 迭代渲染 → 購物車寫入 DB

     編輯:程式設計綜合問答

標準三層流程

1. 後端:Servlet/Controller 查詢商品列表


@WebServlet("/products")
public class ProductServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        List list = productService.findAll(); // Service -> DAO -> DB
        req.setAttribute("products", list);
        req.getRequestDispatcher("/product_list.jsp").forward(req, resp);
    }
}

2. 前端:JSP 使用 JSTL `` 迭代渲染


<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<table>
  <c:forEach items="${products}" var="p">
    <tr>
      <td><img src="${p.imageUrl}" width="80"></td>
      <td>${p.name}</td>
      <td>¥${p.price}</td>
      <td>
        <form action="/cart/add" method="post">
          <input type="hidden" name="productId" value="${p.id}">
          <input type="number" name="quantity" value="1" min="1">
          <button type="submit">加入購物車</button>
        </form>
      </td>
    </tr>
  </c:forEach>
</table>

3. 加入購物車:另一 Servlet 處理 POST,寫入 DB/Session


@WebServlet("/cart/add")
public class AddToCartServlet extends HttpServlet {
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
        long productId = Long.parseLong(req.getParameter("productId"));
        int qty = Integer.parseInt(req.getParameter("quantity"));
        // 登入用戶:寫入資料表 cart_item (user_id, product_id, qty)
        // 未登入:存入 Session Map
        cartService.addItem(getCurrentUserId(req), productId, qty);
        resp.sendRedirect(req.getHeader("Referer")); // 返回商品頁
    }
}

4. 購物車頁:查詢項目 → 計算總價 → JSTL 渲染


// Servlet
List items = cartService.getItems(userId);
BigDecimal total = items.stream().map(i -> i.getPrice().multiply(BigDecimal.valueOf(i.getQty()))).reduce(BigDecimal.ZERO, BigDecimal::add);
req.setAttribute("items", items);
req.setAttribute("total", total);
forward("/cart.jsp");

<!-- cart.jsp -->
<c:forEach items="${items}" var="item">
  ${item.product.name} x ${item.qty} = ¥${item.subtotal}<br>
</c:forEach>
<h3>總計: ¥${total}</h3>

關鍵點

  • **Servlet 做查詢/轉發,JSP 只負責顯示**,不寫 Java 代碼(用 JSTL/EL)。
  • **購物車資料持久化**:登入用戶 → DB 表;遊客 → Session/Redis。
  • **總價計算在後端 (Service/Stream)**,前端只顯示,避免 JS 精度問題。
  • **圖片路徑存相對 URL** (`/upload/xxx.jpg`),前端直接 ``。

總結

JSP 購物車 Demo 核心:**Servlet 查詢 → Request 屬性 → JSTL 迭代渲染 → 表單提交加入購物車 (寫 DB/Session) → 購物車頁後端算總價 → JSTL 顯示**。無需複雜框架,掌握 MVC 分層即可。

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