Expression Language (EL) 主要用於在 JSP 頁面中查找各作用域內的資料並執行簡單運算,它不是程式語言,而是一種簡化的表示法。EL 通常搭配 JSTL (JSP Standard Tag Library) 使用,共同實現「無 Java 代碼」的 JSP 開發模式。
${表達式},以美元符號 $ 開頭,內容置於花括號 {} 中。範例:${loginInfoBean.suser}Hello ${loginInfoBean.suser}, 密碼:${loginInfoBean.spwd}EL 識別符用於引用作用域屬性。除 11 個保留識別符(對應隱式物件)外,其他識別符均視為作用域變數名。${abc} 相當於 <%=pageContext.findAttribute("abc")%>。
11 大隱式物件:
| 隱式物件 | 說明 |
|---|---|
| pageContext | 當前頁面的 PageContext 實例 |
| pageScope | 頁面作用域屬性 Map |
| requestScope | 請求作用域屬性 Map |
| sessionScope | 會話作用域屬性 Map |
| applicationScope | 應用程式作用域屬性 Map |
| param | 請求參數主值 Map (單值) |
| paramValues | 請求參數所有值 Map (陣列) |
| header | 請求標頭主值 Map |
| headerValues | 請求標頭所有值 Map (陣列) |
| cookie | Cookie Map |
| initParam | Web 應用初始化參數 Map |
. 或 [] 存取屬性或集合元素。${userBean.suser} 等同 ${userBean["suser"]};${map["key"]} 取 Map 值。empty 若值為 null、空集合、空陣列或空字串則回傳 true。JSTL (JSP Standard Tag Library) 由 Apache Jakarta 維護,包含 core、format、xml、sql 四大標籤庫。使用前需將 jstl.jar 與 standard.jar 放入 WEB-INF/lib,並將對應 .tld 檔置於 WEB-INF。
<c:out value="..." [default="..."] [escapeXml="true"]/> 輸出變數<c:set var="..." value="..." [scope="page|request|session|application"]/> 設定變數<c:remove var="..." [scope="..."]/> 移除變數<c:if test="..." [var="..."] [scope="..."]>...</c:if> 單分支<c:choose><c:when test="...">...</c:when><c:otherwise>...</c:otherwise></c:choose> 多分支<c:url value="..." [context="..."] [var="..."] [scope="..."]/> 編碼 URL<c:import url="..." [context="..."] [charEncoding="..."] [var="..."] [scope="..."]/> 匯入頁面<c:redirect url="..." [context="..."]/> 重導向<c:param name="..." value="..."/> 附加參數<c:forEach var="i" begin="1" end="100" step="1">${i}<br></c:forEach><c:forEach var="item" items="${list}" varStatus="status">索引:${status.index} 值:${item.name}<br></c:forEach>varStatus 提供 current, index, count, first, last, begin, end, step 等屬性。<fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"/> 或使用 type (short/medium/long/full)。<fmt:formatNumber value="10.3289" pattern="#.##"/>使用前需在 web.xml 註冊 fmt.tld,並在 JSP 引入 <%@ taglib prefix="fmt" uri="https://java.sun.com/jstl/fmt" %>。
傳統 JSP 混入 Java Scriptlet 會導致維護困難、除錯不易、分工模糊。JSTL 透過標籤封裝邏輯,配合 EL 表達式,讓頁面專注於呈現,降低開發成本,利於前後端分工。