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

JavaEE 實戰:EL 表達式與 JSTL 核心標簽庫完全指南

     編輯:Java 綜合教學

JavaEE 實戰:EL 表達式與 JSTL 核心標簽庫完全指南

EL (Expression Language) 與 JSTL (JSP Standard Tag Library) 是現代 JSP 開發的**雙子星**:EL 負責**數據輸出與運算**,JSTL 負責**流程控制與結構化邏輯**,徹底替代 JSP 腳本 `<% ... %>`,實現**無腳本 JSP**。本文系統講解 EL 十一大隱含對象、數據訪問規則、運算符、常用函數,以及 JSTL 核心/格式化標簽實戰用法。

一、EL 表達式核心語法

1.1 基本格式

${expression}

可嵌套在模板文本中:`你好,${user.name}`。

1.2 十一大隱含對象 (按優先級從高到低)

隱含對象類型對應 API用途
pageScopeMapPageContext.getAttribute(name, PAGE_SCOPE)頁面域讀取
requestScopeMaprequest.getAttribute(name)請求域讀取
sessionScopeMapsession.getAttribute(name)會話域讀取
applicationScopeMapapplication.getAttribute(name)應用域讀取
paramMaprequest.getParameter(name)單值請求參數
paramValuesMaprequest.getParameterValues(name)多值請求參數
headerMaprequest.getHeader(name)單值請求頭
headerValuesMaprequest.getHeaderValues(name)多值請求頭
cookieMaprequest.getCookies() 轉 MapCookie 訪問
initParamMapapplication.getInitParameter(name)上下文初始化參數
pageContextPageContextpageContext訪問 request/response/session/application 等

1.3 變量查找順序

${username}
== 依次查找:
pageScope["username"] → requestScope["username"] → sessionScope["username"] → applicationScope["username"]
找到即返回,否則返回空字符串 "" (不拋異常)

二、EL 數據訪問規則 (統一訪問語法)

數據結構EL 寫法底層調用示例
JavaBean 屬性${obj.prop}obj.getProp()${user.name}
Map 鍵值${map.key} / ${map['key-with-dash']}map.get("key")${userMap['full-name']}
List/數組 索引${list[0]} / ${arr[1]}list.get(0) / arr[1]${items[0]}
巢狀訪問${user.address.city}user.getAddress().getCity()${order.buyer.name}

神奇特性: EL 統一了 `.` 和 `[]` 訪問,**自動處理 null 安全** (鏈路中任一環為 null 整體返回空串而非 NPE)。

三、EL 運算符與常用函數

3.1 運算符

  • 算術:`+ - * / (div) % (mod)` — **除零不拋異常,返回 Infinity/NaN**。
  • 邏輯:`&& (and) || (or) ! (not)`。
  • 關係:`== (eq) != (ne) < (lt) > (gt) <= (le) >= (ge)`。
  • 空判斷:`empty obj` — null、空字符串、空數組、空集合、空 Map 均返回 true。
  • 三元:`${condition ? 'yes' : 'no'}`。

3.2 JSTL Functions 標簽庫 (fn:)

<%@ taglib prefix="fn" uri="https://java.sun.com/jsp/jstl/functions" %>
${fn:length(list)}           // 集合/數組/字符串長度
${fn:contains(str, substr)}  // 包含判斷
${fn:startsWith(str, pre)}   // 前綴
${fn:endsWith(str, suf)}     // 後綴
${fn:indexOf(str, substr)}   // 索引
${fn:substring(str, begin, end)}
${fn:replace(str, before, after)}
${fn:toUpperCase(str)} / ${fn:toLowerCase(str)}
${fn:trim(str)} / ${fn:split(str, delimiter)} / ${fn:join(array, separator)}

四、JSTL 核心標簽庫 (c:) 實戰

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

4.1 變量操作

<c:set var="name" value="張三" scope="request" />
<c:remove var="name" scope="request" />
<c:catch var="exception">${1/0}</c:catch> <!-- 捕獲異常不拋出 -->

4.2 條件控制

<c:if test="${user.role == 'admin'}">
    <a href="/admin">管理後台</a>
</c:if>

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

4.3 循環迭代

<c:forEach var="item" items="${userList}" varStatus="status">
    ${status.index} : ${item.name} <br/>
</c:forEach>

<c:forEach var="i" begin="1" end="10" step="2">
    ${i} <br/>
</c:forEach>

4.4 URL 處理 (極其重要)

<c:url value="/user/detail" var="detailUrl">
    <c:param name="id" value="${user.id}"/>
</c:url>
<a href="${detailUrl}">詳情</a>
<!-- 自動補全 contextPath、編碼參數、支援 Session ID 重寫 -->

4.5 輸出轉義 (防 XSS)

<c:out value="${user.bio}" escapeXml="true" default="無簡介" />
<!-- 將 < > & " ' 轉為實體字符 -->

五、JSTL 格式化標簽庫 (fmt:)

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

<fmt:formatNumber value="${price}" type="currency" currencySymbol="¥" />
<fmt:formatDate value="${order.time}" pattern="yyyy-MM-dd HH:mm" />
<fmt:parseNumber value="1,234.56" type="number" parseLocale="en_US" var="num" />
<fmt:parseDate value="2023-10-01" pattern="yyyy-MM-dd" var="date" />

<fmt:setLocale value="zh_CN" scope="session" />
<fmt:setTimeZone value="GMT+8" />
<fmt:bundle basename="messages">
    <fmt:message key="welcome"/>
</fmt:bundle>

六、實戰最佳實踐

  1. 頁面頂部統一引入: `<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>` 等。
  2. 禁用腳本: `web.xml` 配置 `*.jsptrue` 強制無腳本。
  3. 數據準備在 Controller: JSP 僅負責 `${...}` 輸出與 `` 渲染,**不做業務計算**。
  4. 防 XSS: 所有用戶輸入內容輸出**必須**用 `` 或 EL 3.0 `${fn:escapeXml(str)}`。
  5. URL 統一用 ``: 自動處理 contextPath、參數編碼、Session 重寫,避免硬編碼路徑。

七、總結

EL:簡潔的數據訪問語言,十一隱含對象、空安全鏈式訪問、豐富運算符。
JSTL c: 流程控制 (if/choose/forEach)、變量管理、URL 處理、輸出轉義。
JSTL fmt: 國際化格式化 (數字/日期/消息)。
三者結合 = **專業級無腳本 JSP**,是 Spring MVC/Struts 2 等框架 View 層的標準配置。

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