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

JSTL 核心標籤庫實戰指南:從入門到精通

     編輯:Java 綜合教學

為什麼需要 JSTL?

在早期 JSP 開發中,大量使用 Scriptlet(<% ... %>)嵌入 Java 程式碼,導致視圖與業務邏輯耦合嚴重,維護困難。JSTL(JSP Standard Tag Library)作為標準標籤庫,提供了流程控制、資料格式化、迭代、XML 操作等通用功能,讓 JSP 回歸純標記語言本質,實現前後端職責分離。

核心標籤庫(Core)常用標籤詳解

環境準備

<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>

<c:out> - 安全輸出

<c:out value="${user.name}" default="匿名用戶" escapeXml="true" />

自動轉義 HTML 特殊字元(< → &lt;),防範 XSS 攻擊,default 屬性處理 null 值。

<c:set> - 變數賦值

<!-- 設定頁面範圍變數 -->
<c:set var="siteName" value="技術部落格" scope="page" />

<!-- 移除變數 -->
<c:set var="temp" scope="request" />

支援 page/request/session/application 四大作用域,比 Scriptlet 更清晰。

<c:if> / <c:choose> - 條件判斷

<c:if test="${not empty param.keyword}">
    搜尋關鍵字:${param.keyword}
</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>

choose/when/otherwise 等同於 if/else if/else,避免巢狀 if 造成可讀性下降。

<c:forEach> - 迭代王者

<!-- 數字範圍迭代 -->
<c:forEach var="i" begin="1" end="10" step="2">${i} </c:forEach>

<!-- 集合/陣列迭代(支援 varStatus 獲取索引) -->
<c:forEach items="${articleList}" var="article" varStatus="status">
    ${status.index + 1}. ${article.title} <br/>
</c:forEach>

<!-- Map 迭代 -->
<c:forEach items="${scoreMap}" var="entry">
    ${entry.key} : ${entry.value} <br/>
</c:forEach>

varStatus 提供 index(0-based)、count(1-based)、first/last、begin/end 等豐富屬性,極大簡化模板邏輯。

<c:url> / <c:param> - URL 重寫與參數編碼

<c:url value="/article/detail" var="detailUrl">
    <c:param name="id" value="${article.id}" />
    <c:param name="title" value="${article.title}" />
</c:url>
<a href="${detailUrl}">閱讀全文</a>

自動處理 Session ID 重寫(支援無 Cookie 環境)與 URL 編碼,比手工拼接字串安全可靠得多。

格式化標籤庫 - 日期與數字處理

<%@ taglib prefix="fmt" uri="https://java.sun.com/jsp/jstl/fmt" %>

<!-- 日期格式化 -->
<fmt:formatDate value="${article.publishTime}" pattern="yyyy-MM-dd HH:mm" />

<!-- 數字格式化(貨幣、百分比、自定義模式) -->
<fmt:formatNumber value="${product.price}" type="currency" currencySymbol="¥" />
<fmt:formatNumber value="${discount}" pattern="#.##%" />

<!-- 解析輸入 -->
<fmt:parseDate value="${param.birthday}" pattern="yyyy-MM-dd" var="birthDate" />

函數標籤庫 - 字串操作利器

<%@ taglib prefix="fn" uri="https://java.sun.com/jsp/jstl/functions" %>

${fn:length(list)}           <!-- 集合/陣列/字串長度 -->
${fn:toUpperCase(name)}      <!-- 大小寫轉換 -->
${fn:substring(str, 0, 10)}  <!-- 截取子串 -->
${fn:replace(text, 'old', 'new')} <!-- 字串替換 -->
${fn:split(keywords, ',')}   <!-- 分割字串為陣列 -->
${fn:escapeXml(html)}        <!-- XML 轉義 -->
${fn:contains(haystack, 'needle')} <!-- 包含判斷 -->

最佳實踐建議

  1. 禁用 Scriptlet:在專案規範中明確禁止 <% %>,強制使用 JSTL/EL。
  2. 善用作用域:page < request < session < application,按需選擇最小作用域。
  3. EL 表達式優先:${user.name} 比 <c:out value="${user.name}"> 更簡潔,但需注意 XSS 風險(可配置 escapeXml 預設為 true)。
  4. 避免複雜邏輯:JSTL 非圖靈完備,複雜業務邏輯應在 Controller/Service 層完成,JSP 僅負責呈現。

總結

JSTL 核心標籤庫(c:)、格式化標籤庫(fmt:)、函數標籤庫(fn:)構成了 JSP 視圖層的標準工具箱。熟練掌握 forEach 迭代、choose 分支、 重寫與 fmt 格式化,能讓視圖模板乾淨、安全、易維護。下一步建議學習 EL 3.0 的 Lambda/Stream 支援,以及 Thymeleaf/FreeMarker 等現代模板引擎,順應前後端分離趨勢。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved