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

JavaWeb 回顧:EL 表達式語法、隱含對象與自定義函數完整指南

     編輯:Java 綜合教學

EL 表達式基礎語法

Expression Language (EL) 以 ${...} 界定,支持 . 和 [] 兩種訪問操作符:

  • ${user.userName} — 屬性訪問
  • ${user["userName"]} — 鍵訪問,支持特殊字符鍵名
  • ${list[0]} — 列表/數組索引訪問
  • ${map.key} / ${map["key"]} — Map 訪問

核心操作符

11 大隱含對象詳解

隱含對象提供對各作用域屬性、請求參數、Header、Cookie 等的直接訪問:

分類操作符示例
算術+ - * / div % mod${price * quantity}
邏輯and or not${user.age > 18 and user.active}
關系== eq != ne < lt > gt <= le >= ge${score >= 60}
empty判斷 null/空字符串/空集合/空數組${!empty userList}
三元? :${score >= 60 ? '及格' : '不及格'}
對象類型用途示例
pageContextPageContext訪問 ServletContext、Request、Response、Session 等${pageContext.request.requestURI}
pageScopeMap頁面作用域屬性${pageScope.attrName}
requestScopeMap請求作用域屬性${requestScope.user.name}
sessionScopeMap會話作用域屬性${sessionScope.loginUser}
applicationScopeMap應用作用域屬性${applicationScope.config}
paramMap單值請求參數${param.id}
paramValuesMap多值請求參數(數組)${paramValues.ids[0]}
headerMap單值請求頭${header["User-Agent"]}
headerValuesMap多值請求頭${headerValues["Accept-Language"]}
cookieMapCookie 值${cookie.JSESSIONID.value}
initParamMap上下文初始化參數${initParam.contextConfigLocation}

變量查找機制與最佳實踐

無作用域前綴時(如 ${user}),按 page → request → session → application 順序調用 pageContext.findAttribute() 查找。建議始終顯式指定作用域(如 ${requestScope.user}),提升性能並避免歧義。

EL 函數:自定義標簽庫實現

1. 定義靜態方法類

public class ElFunctions {
    public static String formatDate(Date date, String pattern) {
        return new SimpleDateFormat(pattern).format(date);
    }
    public static String upperCase(String str) {
        return str == null ? "" : str.toUpperCase();
    }
}

2. 編寫 TLD 文件(/WEB-INF/tlds/functions.tld)

<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="https://java.sun.com/xml/ns/javaee"
        version="2.0">
    <tlib-version>1.0</tlib-version>
    <short-name>fn</short-name>
    <uri>https://example.com/fn</uri>
    
    <function>
        <name>formatDate</name>
        <function-class>com.example.ElFunctions</function-class>
        <function-signature>java.lang.String formatDate(java.util.Date, java.lang.String)</function-signature>
    </function>
    <function>
        <name>upperCase</name>
        <function-class>com.example.ElFunctions</function-class>
        <function-signature>java.lang.String upperCase(java.lang.String)</function-signature>
    </function>
</taglib>

3. JSP 中引用與使用

<%@ taglib prefix="fn" uri="https://example.com/fn" %>
<body>
    當前時間:${fn:formatDate(new java.util.Date(), 'yyyy-MM-dd HH:mm:ss')}<br/>
    大寫轉換:${fn:upperCase('hello world')}
</body>

注意事項

  • EL 表達式不能以分號結尾
  • TLD 中 <name> 為 EL 中調用的函數名,<function-signature> 必須精確匹配方法簽名(含包名)
  • EL 3.0+ 支持 Lambda、流式操作、變量賦值等高級特性,視容器版本而定
  • 避免在 EL 中編寫複雜業務邏輯,應在 Controller/Service 層準備好數據

熟練掌握 EL 表達式,能大幅簡化 JSP 頁面代碼,實現視圖與邏輯的清晰分離。

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