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

JSTL 核心標簽庫完全指南:四大類標簽、屬性詳解與實戰示例

     編輯:Java 綜合教學

前言:為什麼需要 JSTL?

JSTL (JSP Standard Tag Library) 是 JSP 標準標簽庫,旨在消除 JSP 中的 Java 代碼,提供通用的流程控制、數據格式化、迭代、URL 處理等功能。核心庫 URI:https://java.sun.com/jsp/jstl/core,前綴習慣用 c。

Maven 依賴

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

頁面引入

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

一、通用標簽

1. <c:out> - 安全輸出

屬性:value(輸出值)、escapeXml(是否轉義,默認 true)、default(默認值)

<% request.setAttribute("msg", "<script>alert(1)</script>"); %>
<c:out value="${msg}" />  <!-- 輸出:&lt;script&gt;alert(1)&lt;/script&gt; -->
<c:out value="${null}" default="無數據" />  <!-- 輸出:無數據 -->

2. <c:set> - 設置變量/屬性

屬性:var(變量名)、value(值)、scope(作用域:page/request/session/application)、target(目標 Bean)、property(屬性名)

<!-- 設置作用域變量 -->
<c:set var="count" value="${10+5}" scope="session" />
<c:out value="${count}" />

<!-- 設置 Bean 屬性 -->
<% pageContext.setAttribute("user", new User()); %>
<c:set target="${user}" property="name" value="張三" />

3. <c:remove> - 移除變量

<c:remove var="count" scope="session" />

4. <c:catch> - 異常捕獲

<c:catch var="ex">
  <% int i = 1/0; %>
</c:catch>
<c:if test="${ex != null}">發生異常:${ex.message}</c:if>

二、條件控制標簽

1. <c:if> - 單分支判斷

屬性:test(條件)、var(結果變量名)、scope(結果作用域)

<c:if test="${user.age >= 18}" var="isAdult" scope="request">
  成年人
</c:if>
<c:out value="${isAdult}" />  <!-- true/false -->

2. <c:choose> / <c:when> / <c:otherwise> - 多條件分支

等同 Java switch-case-default

<c:choose>
  <c:when test="${score >= 90}">優秀</c:when>
  <c:when test="${score >= 60}">及格</c:when>
  <c:otherwise>不及格</c:otherwise>
</c:choose>

三、迭代標簽

1. <c:forEach> - 集合/數組/範圍迭代

屬性:var(當前項)、items(集合)、varStatus(狀態對象)、begin/end/step(範圍控制)

<% 
  List users = Arrays.asList(new User("張三",25), new User("李四",30));
  request.setAttribute("users", users);
%>
<table>
  <c:forEach var="u" items="${users}" varStatus="s">
    <tr>
      <td>${s.count}</td>      <!-- 1-based 計數 -->
      <td>${s.index}</td>      <!-- 0-based 索引 -->
      <td>${u.name}</td>
      <td>${u.age}</td>
      <td>${s.first ? '首行' : ''}</td>
      <td>${s.last ? '末行' : ''}</td>
    </tr>
  </c:forEach>
</table>

2. <c:forTokens> - 字符串分割迭代

額外屬性:delims(分隔符)

<c:forTokens items="張三,李四,王五" delims="," var="name">
  ${name} <br/>
</c:forTokens>

四、URL 相關標簽

1. <c:url> - 構建 URL(支持上下文路徑、Session 維護、參數編碼)

<c:url value="/user/list" var="listUrl" scope="session">
  <c:param name="page" value="1" />
  <c:param name="size" value="10" />
</c:url>
<a href="${listUrl}">用戶列表</a>
<!-- 輸出:/context/user/list?page=1&size=10 -->

2. <c:param> - URL 參數(配合 url/redirect/import 使用)

已在上例演示。

3. <c:redirect> - 重定向

<c:redirect url="/login.jsp">
  <c:param name="error" value="true" />
</c:redirect>

4. <c:import> - 包含資源(可跨應用、跨網絡)

<!-- 包含本地資源 -->
<c:import url="/fragment/header.jsp" />

<!-- 包含外部網絡資源 -->
<c:import url="https://api.example.com/data" var="remoteData" />
<c:out value="${remoteData}" />

實戰技巧總結

  1. 優先用 <c:out> 輸出變量,自動防 XSS
  2. 用 <c:url> 生成鏈接,自動處理上下文路徑與 JSSESSIONID
  3. 複雜判斷用 <c:choose>,簡單用 <c:if>
  4. 迭代必用 varStatus 獲取行號、首尾標識
  5. 避免在 JSP 中寫 Java 邏輯,複雜計算放 Controller/Service

掌握 JSTL 核心庫,讓 JSP 回歸視圖本職,代碼更乾淨、更安全、更易維護。

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