<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
Maven 依賴(JSTL 1.2 為標準版):
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
注意:Tomcat 9+ 已內建,若部署到 Jetty 或舊版容器需自行放入 jstl-1.2.jar。
| 標籤 | 用途 | 常見屬性 |
|---|---|---|
<c:forEach> | 迭代 Collection、Map、陣列、數字範圍 | items, var, begin, end, step, varStatus |
<c:forTokens> | 字串分割迭代 | items, delims, var |
<c:if> | 單一條件判斷 | test, var, scope |
<c:choose> / <c:when> / <c:otherwise> | 多條件分支(類似 switch) | test |
<c:set> | 設定變數、Map 值、Bean 屬性 | var, value, target, property, scope |
<c:remove> | 移除變數 | var, scope |
<c:out> | 輸出並可選擇性跳脫 XML/HTML | value, default, escapeXml |
<c:catch> | 捕獲例外並存入變數 | var |
<c:url> | 產生含 Session ID、參數編碼的 URL | value, var, context, scope |
<c:param> | 為 <c:url>、<c:redirect> 附加參數 | name, value |
<c:redirect> | 重導向 | url, context |
<c:import> | 引入內容(支援絕對/相對 URL) | url, var, scope, context |
<c:forEach var="person" items="${userList}" varStatus="status">
<tr class="${status.count % 2 == 0 ? 'even' : 'odd'}">
<td>${status.count}</td>
<td>${person.name}</td>
<td>${person.email}</td>
</tr>
</c:forEach>
varStatus 提供 count (1-based)、index (0-based)、first/last 等屬性。
<c:forEach var="entry" items="${userMap}">
Key: ${entry.key}, Value: ${entry.value.name}
</c:forEach>
${entry} 為 Map.Entry,可直接取 .key / .value。
<c:forEach var="i" begin="1" end="10" step="2">
${i} <!-- 1,3,5,7,9 -->
</c:forEach>
<c:if test="${not empty user}" var="hasUser" scope="request">
歡迎,${user.name}
</c:if>
<c:if test="${!hasUser}">
請先登入
</c:if>
<c:choose>
<c:when test="${user.role == 'admin'}">管理員</c:when>
<c:when test="${user.role == 'editor'}">編輯</c:when>
<c:otherwise>訪客</c:otherwise>
</c:choose>
<!-- 頁面變數 -->
<c:set var="title" value="首頁" scope="page" />
<!-- Map 放值 -->
<c:set target="${map}" property="key1" value="val1" />
<!-- Bean 設值 -->
<c:set target="${user}" property="name" value="新名稱" />
<c:out value="${userInput}" default="[無資料]" escapeXml="true" />
escapeXml="true"(預設)會將 < > & " ' 轉義。
<c:catch var="ex">
<% int x = 1 / 0; %>
</c:catch>
${ex.message} <!-- / by zero -->
<c:forTokens var="token" items="a,b,c,d" delims=",">
${token}<br/>
</c:forTokens>
<c:url var="searchUrl" value="/search">
<c:param name="q" value="中文關鍵字" />
<c:param name="page" value="1" />
</c:url>
<a href="${searchUrl}">搜尋</a>
<!-- 輸出:/search?q=%E4%B8%AD%E6%96%87%E9%97%9C%E9%8D%B5%E5%AD%97&page=1 -->
自動處理 URL 重寫(Session ID)與參數 URL 編碼。
<% ... %>,分離視圖邏輯。varStatus="outer",內層 varStatus="inner",避免變數衝突。