Expression Language (EL) 是 JSP 2.0 引入的簡化腳本語法,旨在替代繁瑣的 `<%= %>` 腳本片段,提供更簡潔、可讀性更強的數據訪問方式。EL 主要用於 從各種作用域獲取數據並輸出到頁面。
基本格式:${expression}
. 與 [] 運算符均可訪問屬性:${user.name} ≡ ${user['name']}null 值,不拋出異常,直接輸出空字串${price * quantity}、${age >= 18}<%-- 在 Servlet 或 JSP 中設置 --%>
<% request.setAttribute("username", "張三"); %>
<!-- 頁面輸出 -->
歡迎您,${username}
<%
String[] cities = {"北京", "上海", "廣州", "深圳"};
request.setAttribute("cities", cities);
List<String> fruits = Arrays.asList("蘋果", "香蕉", "橘子");
request.setAttribute("fruits", fruits);
%>
<!-- 索引訪問 -->
第一城市:${cities[0]} <br/>
第二水果:${fruits[1]}
<%
Map<String, Object> userInfo = new HashMap<>();
userInfo.put("name", "李四");
userInfo.put("age", 28);
userInfo.put("email", "lisi@example.com");
request.setAttribute("userInfo", userInfo);
%>
<!-- 兩種鍵值訪問方式 -->
姓名:${userInfo.name} 或 ${userInfo['name']} <br/>
年齡:${userInfo.age} <br/>
郵箱:${userInfo.email}
<%-- User.java --%>
public class User {
private String name;
private Address address; // 嵌套對象
// getter/setter 省略
}
<%--
Address.java
private String city;
private String street;
// getter/setter
--%>
<%
User user = new User();
user.setName("王五");
user.setAddress(new Address("上海", "南京路"));
request.setAttribute("user", user);
%>
<!-- 級聯訪問嵌套屬性 -->
用戶:${user.name} <br/>
城市:${user.address.city} <br/>
街道:${user.address.street}
| 隱含對象 | 說明 | 範例 |
|---|---|---|
pageContext | 頁面上下文,可訪問 request/session/application 等 | ${pageContext.request.contextPath} |
param | 請求參數 Map (單值) | ${param.id} |
paramValues | 請求參數 Map (多值陣列) | ${paramValues.ids[0]} |
header | 請求頭 Map | ${header['User-Agent']} |
cookie | Cookie Map | ${cookie.JSESSIONID.value} |
initParam | 上下文初始化參數 | ${initParam.configPath} |
<!-- 避免 user 或 address 為 null 時拋出 NPE -->
${user?.address?.city ?: "未知城市"}
注意:?.(安全導航) 與?:(Elvis 運算符) 需容器支援 EL 3.0+ (Tomcat 8.5+, Jetty 9.3+)
<%@ taglib prefix="fn" uri="https://java.sun.com/jsp/jstl/functions" %>
長度:${fn:length(list)}
包含:${fn:contains(str, "keyword")}
分割:${fn:split(csvStr, ",")}
替換:${fn:replace(text, "old", "new")}
<%@ taglib prefix="fmt" uri="https://java.sun.com/jsp/jstl/fmt" %>
日期:<fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd"/>
數字:<fmt:formatNumber value="${price}" type="currency"/>
EL 表達式配合 JSTL 標籤庫,能將 JSP 頁面的邏輯代碼降至最低,實現真正的「視圖與控制分離」。掌握其核心語法、隱含對象與進階技巧,是 Java Web 開發者的必備基本功。