JSTL 核心标签库实战:c:forEach 遍历商品列表

一、JSTL 是什么?
JSTL(JSP Standard Tag Library) 是一套标准标签库,用来替代 JSP 中的 Java 脚本。
使用前必须在 JSP 页面引入核心标签库:

jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
prefix="c" 是约定俗成的前缀,你也可以改成其他名字,但推荐用 c。

二、最常用的标签(从简单到复杂)

  1. <c:out>:输出数据,可带默认值
    jsp
    <c:out value="${name}" default="匿名用户" />
    <c:out value="${name}" escapeXml="true" />
  2. <c:set>:设置变量(可以存到不同作用域)
    jsp
    <c:set var="count" value="10" scope="page" />
    <c:set var="total" value="${price * quantity}" scope="request" />
  3. <c:remove>:删除变量
    jsp
    <c:remove var="count" scope="page" />
  4. <c:if>:条件判断(注意没有 else)
    jsp
    <c:if test="${user != null}">

    欢迎,${user.name}

</c:if>
<c:if test="${empty cart}">

购物车为空


</c:if>
5. <c:choose>、<c:when>、<c:otherwise>:多分支判断(类似 switch)
jsp
<c:choose>
<c:when test="${score >= 90}">优秀</c:when>
<c:when test="${score >= 60}">及格</c:when>
<c:otherwise>不及格</c:otherwise>
</c:choose>
6. <c:forEach>:循环遍历(重点)
jsp
<c:forEach items="${list}" var="item" varStatus="status">
第 ${status.count} 个:${item.name}

</c:forEach>
varStatus 常用属性:

属性 说明
index 从 0 开始的索引
count 从 1 开始的计数
first 是否为第一个元素(boolean)
last 是否为最后一个元素(boolean)
current 当前元素
7. <c:forTokens>:分割字符串遍历
jsp
<c:forTokens items="苹果,香蕉,橘子" delims="," var="fruit">
${fruit}

</c:forTokens>
8. URL 相关标签:<c:url>、<c:param>
jsp
<c:url value="/product/detail" var="detailUrl">
<c:param name="id" value="101" />
</c:url>
查看商品详情
三、完整实战:展示商品列表(带序号、条件格式化、分页效果)
Servlet(模拟数据)
java
@WebServlet("/productList")
public class ProductServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
List list = new ArrayList<>();
list.add(new Product(1, "手机", 2999, 50));
list.add(new Product(2, "电脑", 5999, 0));
list.add(new Product(3, "耳机", 199, 150));
req.setAttribute("products", list);
req.getRequestDispatcher("/productList.jsp").forward(req, resp);
}
}
productList.jsp(JSTL 展示)
jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

商品列表
序号商品名价格库存状态
${status.count} ${p.name} ${p.price} 元 ${p.stock} 缺货 库存紧张(${p.stock}) 充足
四、嵌套循环:遍历购物车(购物车中包含多个商品) jsp ${i.count} ${cartItem.product.name} ${cartItem.quantity} ${cartItem.product.price * cartItem.quantity} 五、常见错误与解决 JSTL 标签显示为源码 → 忘记引入 <%@ taglib %>,或者没有添加 JSTL 依赖

${} 不解析 → 检查 page 指令是否设置了 isELIgnored="true",改为 false 或删除

c:forEach 无法遍历 → items 属性必须是一个集合或数组,不能是 null(可为空集合)

c:out 没有默认值 → 使用 default 属性或先 <c:if> 判断

六、Maven 依赖(如果使用 JSTL 1.2)

javax.servlet jstl 1.2 注意:某些 Tomcat 已经内置了 JSTL,但最好显式引入。

posted on 2026-04-26 14:50  czkl  阅读(9)  评论(0)    收藏  举报

导航