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

JSP EL 表達式語言完整指南:語法、運算符、隱式對象與實戰範例

     編輯:關於JSP

Expression Language (EL) 是 JSP 2.0 引入的簡化表達式語言,旨在替代冗長的 Scriptlet,使頁面更接近純 HTML。本文系統講解 EL 定義、語法結構、運算符、隱式對象、變量查找機制,並提供豐富對照範例,助力開發者快速掌握 EL 核心用法。

核心定義與啟用

  • 語法:${expression}
  • JSP 2.0+ 預設啟用;如需禁用:<%@ page isELIgnored="true" %> 或 web.xml 配置 <el-ignored>true</el-ignored>

變量存取:點運算符與括號運算符

  • ${user.name} — 標準屬性存取
  • ${user["my-name"]} — 屬性名含特殊字符時必須用括號
  • ${sessionScope.user[data]} — data 為變量實現動態鍵存取,點運算符無法做到

變量查找順序與作用域隱式對象

${username} 未指定作用域時,依序搜尋:

  1. pageScope (PageContext)
  2. requestScope
  3. sessionScope
  4. applicationScope

找到即返回,否則返回 null(不拋異常)。可顯式指定作用域:${requestScope.username}。

EL 運算符完整表

類別運算符說明
算術+ - * / div % moddiv// 同義,mod/% 同義
關系== eq != ne < lt > gt <= le >= ge字母與符號等價,建議用字母避免 XML 轉義
邏輯&& and || or ! not
emptyempty expr前綴運算符,判斷 null、空字符串、空集合、空 Map、空數組
條件expr ? val1 : val2三元運算

隱式對象分類詳解

1. 參數與 Header 類

對象映射等價 Servlet API
param單值參數request.getParameter(name)
paramValues多值參數數組request.getParameterValues(name)
header單值 Headerrequest.getHeader(name)
headerValues多值 Header 數組request.getHeaders(name)
cookieCookie 名→對象request.getCookies() 遍歷
initParam上下文初始化參數servletContext.getInitParameter(name)

2. 作用域映射類

pageScope、requestScope、sessionScope、applicationScope — Map<String, Object>,鍵為屬性名,值為屬性對象。

3. 核心上下文對象

pageContext — 對應 JSP 隱式對象 pageContext,可鏈式訪問 request、response、session、servletContext 等。
注意:${pageContext} 返回 PageContext 對象本身,而非屬性值。

實戰對照範例

傳統 ScriptletEL 表達式說明
<%=request.getParameter("username")%>${param.username}單值參數
<%=request.getAttribute("user")%>${requestScope.user}請求屬性
<%=session.getAttribute("cart")%>${sessionScope.cart}會話屬性
<%=application.getAttribute("config")%>${applicationScope.config}應用屬性
<%=request.getHeader("User-Agent")%>${header["User-Agent"]}Header 含連字符需括號
<%=request.getCookies()[0].getValue()%>${cookie.username.value}Cookie 值存取
判斷空並輸出預設值${empty user.name ? '匿名' : user.name}empty + 三元運算

進階技巧

  • 調用靜態方法:配合自定義函數標籤庫(Tag Library Descriptor),如 ${my:formatDate(date)}
  • 集合操作:${list[0]}、${map.key}、${map['key.with.dot']}
  • 巢狀屬性:${user.address.city} 自動調用 getter 鏈

常見誤區

  1. 以為 ${pageContext.request} 是 request 對象 — 實為 PageContext,需 ${pageContext.request.remoteAddr} 鏈式取值
  2. EL 表達式中直接寫 Java 代碼 — 不支持,僅支持屬性存取、運算、函數調用
  3. 忽略 isELIgnored 導致舊專案升級後 EL 失效

總結

EL 以簡潔語法、豐富運算符、完善隱式對象,將 JSP 從 Java 代碼混雜中解脫,配合 JSTL 標籤庫可構建近乎零 Scriptlet 的現代視圖層。掌握變量查找機制與 empty 運算符,是避免空指針異常、編寫健壯頁面的關鍵。

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