JSTL (JavaServer Pages Standard Tag Library) 是 JSP 開發中不可或缺的標準標籤庫,它以宣告式標籤取代腳本程式碼,提升頁面可讀性與維護性。本文涵蓋環境配置、Core 標籤庫四大類標籤(通用、條件、迭代、URL)的詳細用法與實戰範例。
jstl.jar — 標籤庫實作standard.jar — 標準標籤庫支援將兩個 JAR 放入 WEB-INF/lib 目錄。
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="https://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="fmt" uri="https://java.sun.com/jsp/jstl/fmt" %>
prefix 可自訂,慣用 c、sql、fmt。
在 JSP 頁面使用 Core 標籤需引入:
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c" %>
| 標籤 | 功能 | 範例 |
|---|---|---|
<c:out> | 輸出表達式結果,自動轉義 HTML,防 XSS | <c:out value="${user.name}" /> |
<c:set> | 設定變數或 Bean 屬性 | <c:set var="username" value="lisi" scope="session"/> |
<c:remove> | 移除指定範圍變數 | <c:remove var="username" scope="session"/> |
<c:catch> | 捕獲例外並存入變數 | 見下方範例 |
<c:catch var="exception">
<%
int i = 5, j = 0, k = i / j; // 觸發 ArithmeticException
%>
</c:catch>
<c:out value="${exception}" /><br>
<c:out value="${exception.message}" /> <!-- 等同 exception.getMessage() -->
若未發生異常,var 變數會被移除;若省略 var,異常僅被吞噬不保存。
| 標籤 | 說明 |
|---|---|
<c:if> | 單一條件判斷,支援 var 存儲布林結果 |
<c:choose> | 多互斥條件容器,配合 <c:when>、<c:otherwise> |
<c:if test="${user.visitCount == 1}">
This is your first visit.
</c:if>
<c:if test="${param.name == 'admin'}" var="result" />
<c:out value="${result}" /> <!-- 輸出 true/false -->
<c:choose>
<c:when test="${row.v_money < 10000}">初學下海</c:when>
<c:when test="${row.v_money >= 10000 && row.v_money < 20000}">身手小試</c:when>
<c:otherwise>商業能手</c:otherwise>
</c:choose>
支援集合、Map、陣列、範圍整數迭代。
<c:forEach items="${finalResult.rows}" var="row">
<tr class="<%=tdClass[(rank+1)%2]%>">
<td align="center"><span><%=rank%></span></td>
<td align="center"><span><c:out value="${row.player_name}"/></span></td>
<td align="center"><span>¥ <c:out value="${row.money}"/></span></td>
</tr>
<% rank++; %>
</c:forEach>
<c:forEach var="i" begin="100" end="110" step="2">
${i}
</c:forEach>
輸出:100, 102, 104, 106, 108, 110
| 標籤 | 用途 |
|---|---|
<c:url> | 編碼 URL、自動附加 Session ID |
<c:param> | 為 URL 添加查詢參數 |
<c:redirect> | 客戶端重導向 |
<c:import> | 引入外部資源內容 |
<c:url value="/search.do" var="searchUrl">
<c:param name="keyword" value="${param.q}" />
<c:param name="page" value="1" />
</c:url>
<a href="<c:out value='${searchUrl}'/>">搜尋</a>
<% %>,實現關注點分離。page、request、session、application,按需選擇生命週期。<c:out> 預設轉義 HTML,輸出用戶輸入內容時務必使用。<fmt:message>)、日期格式化(<fmt:formatDate>)、數字格式化(<fmt:formatNumber>)。JSTL Core 標籤庫提供了 JSP 開發所需的核心控制流與資料輸出功能。掌握 <c:out>、<c:set>、<c:if>、<c:choose>、<c:forEach> 等常用標籤,配合 EL 表達式,即可編寫乾淨、可維護的視圖層代碼。進階場景可結合 SQL、XML、格式化等標籤庫,構建功能完整的企業級 Web 應用。