JSTL (JSP Standard Tag Library) 封裝了 JSP 應用中最通用的核心功能(迭代、條件判斷、格式化、數據庫操作、XML 處理等),是替代腳本的最佳實踐。本文系統整理五大標籤庫用法、安裝步驟及引用語法。
jakarta-taglibs-standard-current.zip (官網: Apache Archive)。standard.jar 和 jstl.jar 複製到項目 WEB-INF/lib/ 目錄下。| 功能類別 | 前綴 | URI | 核心用途 |
|---|---|---|---|
| 核心標籤 | c | https://java.sun.com/jsp/jstl/core | 流程控制、變量操作、URL處理、迭代 |
| 格式化標籤 | fmt | https://java.sun.com/jsp/jstl/fmt | 數字、日期、貨幣格式化/解析、國際化 |
| SQL 標籤 | sql | https://java.sun.com/jsp/jstl/sql | 數據庫查詢、更新、事務、數據源配置 |
| XML 標籤 | x | https://java.sun.com/jsp/jstl/xml | XML 解析、XPath 查詢、XSLT 轉換 |
| 函數標籤 | fn | https://java.sun.com/jsp/jstl/functions | 字符串操作 (長度、截取、替換、大小寫等) |
引用: `<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>`
| 標籤 | 說明 | 典型示例 |
|---|---|---|
<c:out> | 輸出數據,自動轉義 HTML,防 XSS | ` |
<c:set> / <c:remove> | 設置/移除作用域變量 | ` |
<c:if> / <c:choose> <c:when> <c:otherwise> | 條件判斷 (單分支/多互斥分支) | 見下方代碼塊 |
<c:forEach> | 通用迭代 (List、Map、數組、Range) | ` |
<c:forTokens> | 按分隔符分割字符串迭代 | ` |
<c:import> | 引入外部資源 (URL/相對路徑),比 include 更強 | ` |
<c:redirect> / <c:url> | 重定向 / 構建帶參數 URL | ` |
<c:catch> | 捕獲異常,存入變量 | ` |
<c:choose>
<c:when test="${score >= 90}">優秀</c:when>
<c:when test="${score >= 60}">及格</c:when>
<c:otherwise>不及格</c:otherwise>
</c:choose>
引用: `<%@ taglib prefix="fmt" uri="https://java.sun.com/jsp/jstl/fmt" %>`
<fmt:formatNumber>:數字/貨幣/百分比格式化 (type, pattern, currencySymbol)。<fmt:formatDate>:日期時間格式化 (pattern="yyyy-MM-dd HH:mm", type="both", dateStyle="full")。<fmt:parseNumber> / <fmt:parseDate>:字符串解析為數字/日期對象。<fmt:setLocale> / <fmt:bundle> / <fmt:message>:國際化資源綁定與顯示。<fmt:requestEncoding>:設置 Request 編碼 (需在最頂部使用)。引用: `<%@ taglib prefix="sql" uri="https://java.sun.com/jsp/jstl/sql" %>`
<sql:setDataSource dataSource="jdbc/myDS" /> <!-- 或驅動/URL/用戶/密碼 -->
<sql:query var="users" sql="SELECT * FROM user WHERE age > ?">
<sql:param value="${param.minAge}" />
</sql:query>
<c:forEach items="${users.rows}" var="u">
${u.name} - ${u.email}
</c:forEach>
<sql:update sql="INSERT INTO log(msg) VALUES (?)">
<sql:param value="新用戶註冊" />
</sql:update>
<sql:transaction> <!-- 事務塊 -->
<sql:update ... />
<sql:update ... />
</sql:transaction>
引用: `<%@ taglib prefix="x" uri="https://java.sun.com/jsp/jstl/xml" %>`
額外依賴: 需將 XercesImpl.jar、xalan.jar 放入 Tomcat `lib` 目錄。
<x:parse>:解析 XML 文檔/字符串,存入變量 (`var="doc"`) 或指定輸出 (`varDom="doc"`)。<x:out select="$doc//book/title" />:XPath 表達式輸出。<x:forEach select="$doc//book" var="book">:迭代節點。<x:if select="$book/@category='tech'"> / <x:choose>:條件判斷。<x:transform xslt="style.xsl">:XSLT 轉換。引用: `<%@ taglib prefix="fn" uri="https://java.sun.com/jsp/jstl/functions" %>`
| 函數 | 說明 |
|---|---|
fn:contains(str, substr) | 包含子串判斷 (區分大小寫) |
fn:containsIgnoreCase | 不區分大小寫包含判斷 |
fn:startsWith / fn:endsWith | 前綴/後綴判斷 |
fn:indexOf(str, substr) | 子串首次出現索引 |
fn:substring(str, begin, end) | 截取子串 [begin, end) |
fn:substringBefore/After(str, substr) | 指定子串前/後的部分 |
fn:split(str, delim) | 分割字符串為數組 |
fn:join(arr, delim) | 數組元素連接為字符串 |
fn:replace(str, before, after) | 替換子串 |
fn:toUpperCase / toLowerCase | 大小寫轉換 |
fn:trim(str) | 去除首尾空白 |
fn:length(obj) | 獲取字符串長度/集合大小 |
fn:escapeXml(str) | 轉義 XML 特殊字符 |