JSTL (JSP Standard Tag Library) 是 JSP 標準標簽庫,旨在消除 JSP 中的 Java 代碼,提供通用的流程控制、數據格式化、迭代、URL 處理等功能。核心庫 URI:https://java.sun.com/jsp/jstl/core,前綴習慣用 c。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
屬性:value(輸出值)、escapeXml(是否轉義,默認 true)、default(默認值)
<% request.setAttribute("msg", "<script>alert(1)</script>"); %>
<c:out value="${msg}" /> <!-- 輸出:<script>alert(1)</script> -->
<c:out value="${null}" default="無數據" /> <!-- 輸出:無數據 -->
屬性:var(變量名)、value(值)、scope(作用域:page/request/session/application)、target(目標 Bean)、property(屬性名)
<!-- 設置作用域變量 -->
<c:set var="count" value="${10+5}" scope="session" />
<c:out value="${count}" />
<!-- 設置 Bean 屬性 -->
<% pageContext.setAttribute("user", new User()); %>
<c:set target="${user}" property="name" value="張三" />
<c:remove var="count" scope="session" />
<c:catch var="ex">
<% int i = 1/0; %>
</c:catch>
<c:if test="${ex != null}">發生異常:${ex.message}</c:if>
屬性:test(條件)、var(結果變量名)、scope(結果作用域)
<c:if test="${user.age >= 18}" var="isAdult" scope="request">
成年人
</c:if>
<c:out value="${isAdult}" /> <!-- true/false -->
等同 Java switch-case-default
<c:choose>
<c:when test="${score >= 90}">優秀</c:when>
<c:when test="${score >= 60}">及格</c:when>
<c:otherwise>不及格</c:otherwise>
</c:choose>
屬性:var(當前項)、items(集合)、varStatus(狀態對象)、begin/end/step(範圍控制)
<%
List users = Arrays.asList(new User("張三",25), new User("李四",30));
request.setAttribute("users", users);
%>
<table>
<c:forEach var="u" items="${users}" varStatus="s">
<tr>
<td>${s.count}</td> <!-- 1-based 計數 -->
<td>${s.index}</td> <!-- 0-based 索引 -->
<td>${u.name}</td>
<td>${u.age}</td>
<td>${s.first ? '首行' : ''}</td>
<td>${s.last ? '末行' : ''}</td>
</tr>
</c:forEach>
</table>
額外屬性:delims(分隔符)
<c:forTokens items="張三,李四,王五" delims="," var="name">
${name} <br/>
</c:forTokens>
<c:url value="/user/list" var="listUrl" scope="session">
<c:param name="page" value="1" />
<c:param name="size" value="10" />
</c:url>
<a href="${listUrl}">用戶列表</a>
<!-- 輸出:/context/user/list?page=1&size=10 -->
已在上例演示。
<c:redirect url="/login.jsp">
<c:param name="error" value="true" />
</c:redirect>
<!-- 包含本地資源 -->
<c:import url="/fragment/header.jsp" />
<!-- 包含外部網絡資源 -->
<c:import url="https://api.example.com/data" var="remoteData" />
<c:out value="${remoteData}" />
掌握 JSTL 核心庫,讓 JSP 回歸視圖本職,代碼更乾淨、更安全、更易維護。