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。
二、最常用的标签(从简单到复杂)
- <c:out>:输出数据,可带默认值
jsp
<c:out value="${name}" default="匿名用户" />
<c:out value="${name}" escapeXml="true" /> - <c:set>:设置变量(可以存到不同作用域)
jsp
<c:set var="count" value="10" scope="page" />
<c:set var="total" value="${price * quantity}" scope="request" /> - <c:remove>:删除变量
jsp
<c:remove var="count" scope="page" /> - <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.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} |
|
${} 不解析 → 检查 page 指令是否设置了 isELIgnored="true",改为 false 或删除
c:forEach 无法遍历 → items 属性必须是一个集合或数组,不能是 null(可为空集合)
c:out 没有默认值 → 使用 default 属性或先 <c:if> 判断
六、Maven 依赖(如果使用 JSTL 1.2)
浙公网安备 33010602011771号