首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

JSTL 核心標籤庫 (c:) 實戰速查手冊

     編輯:Java 程式設計入門

依賴與引入

<%@ 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/HTMLvalue, default, escapeXml
<c:catch>捕獲例外並存入變數var
<c:url>產生含 Session ID、參數編碼的 URLvalue, var, context, scope
<c:param>為 <c:url>、<c:redirect> 附加參數name, value
<c:redirect>重導向url, context
<c:import>引入內容(支援絕對/相對 URL)url, var, scope, context

高頻使用範例

1. 迭代 List / 陣列

<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 等屬性。

2. 迭代 Map

<c:forEach var="entry" items="${userMap}">
    Key: ${entry.key}, Value: ${entry.value.name}
</c:forEach>

${entry} 為 Map.Entry,可直接取 .key / .value。

3. 數字範圍迭代

<c:forEach var="i" begin="1" end="10" step="2">
    ${i} <!-- 1,3,5,7,9 -->
</c:forEach>

4. 條件判斷

<c:if test="${not empty user}" var="hasUser" scope="request">
    歡迎,${user.name}
</c:if>
<c:if test="${!hasUser}">
    請先登入
</c:if>

5. 多條件分支

<c:choose>
    <c:when test="${user.role == 'admin'}">管理員</c:when>
    <c:when test="${user.role == 'editor'}">編輯</c:when>
    <c:otherwise>訪客</c:otherwise>
</c:choose>

6. 變數操作

<!-- 頁面變數 -->
<c:set var="title" value="首頁" scope="page" />

<!-- Map 放值 -->
<c:set target="${map}" property="key1" value="val1" />

<!-- Bean 設值 -->
<c:set target="${user}" property="name" value="新名稱" />

7. 安全輸出(防 XSS)

<c:out value="${userInput}" default="[無資料]" escapeXml="true" />

escapeXml="true"(預設)會將 < > & " ' 轉義。

8. 例外捕獲

<c:catch var="ex">
    <% int x = 1 / 0; %>
</c:catch>
${ex.message} <!-- / by zero -->

9. 字串分割迭代

<c:forTokens var="token" items="a,b,c,d" delims=",">
    ${token}<br/>
</c:forTokens>

10. URL 產生與參數編碼

<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 編碼。

最佳實務提醒

  1. 避免 Scriptlet:JSTL + EL 取代 <% ... %>,分離視圖邏輯。
  2. 型別轉換:EL 會自動轉型(字串→數字、集合大小等),但複雜邏輯建議在 Controller/Service 完成。
  3. 巢狀迭代:外層 varStatus="outer",內層 varStatus="inner",避免變數衝突。
  4. 效能:大量資料迭代時,考慮分頁或改用前端渲染(AJAX + JSON)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved