Expression Language (EL) 簡化了 JSP 頁面的數據訪問,其核心在於隱式對象與 JSP 作用域的無縫映射。本文詳細梳理 EL 的 11 個隱式對象,重點解析四大作用域對象的對應關係與查找機制。
EL 提供 11 個隱式對象,除 pageContext 外,其餘均為 Map 類型,鍵為屬性名,值為屬性值:
pageContext 的 page 作用域屬性request 作用域屬性session 作用域屬性application 作用域屬性request.getParameter())request.getParameterValues())PageContext 實例,可訪問 request、session 等對象EL 通過 pageScope、requestScope、sessionScope、applicationScope 精確訪問對應作用域屬性,避免同名屬性衝突。
當直接使用 ${attrName} 不指定作用域時,EL 依次搜索:
pageScope → requestScope → sessionScope → applicationScope
找到首個匹配即返回,這意味著較小作用域的同名屬性會遮蓋較大作用域的屬性。
<!-- 僅從 request 作用域獲取 user 屬性 -->
${requestScope.user}
<!-- 僅從 session 作用域獲取 cart 屬性 -->
${sessionScope.cart}
<!-- 遍歷 application 作用域所有屬性 -->
<c:forEach items="${applicationScope}" var="entry">
${entry.key} = ${entry.value}<br/>
</c:forEach>
pageContext 是唯一非 Map 類型的隱式對象,它提供了訪問 JSP 核心對象的橋樑:
<!-- 獲取請求路徑 -->
${pageContext.request.contextPath}
<!-- 獲取會話 ID -->
${pageContext.session.id}
<!-- 獲取 ServletContext 實例 -->
${pageContext.servletContext}

掌握 EL 作用域機制,能讓 JSP 頁面更簡潔、邏輯更清晰,是現代 JSP 開發的必備技能。