JSP 九大内置对象与 EL 表达式:告别 <%%> 脚本
一、为什么要有 EL 表达式?
在 JSP 早期,我们常用 <%= request.getAttribute("user") %> 这种 Java 脚本,页面又乱又难维护。
EL(Expression Language) 就是为了让 JSP 页面“像写 HTML 一样取数据”。

request response out session application pageContext config page exception(按顺序背)
三、EL 表达式基础语法
基本使用
jsp
<%
request.setAttribute("name", "张三");
session.setAttribute("role", "admin");
application.setAttribute("app", "商城系统");
%>
<%-- 传统脚本输出 --%>
<%= request.getAttribute("name") %>
<%-- EL 输出(推荐) --%>
${name}
${requestScope.name}
${sessionScope.role}
${applicationScope.app}
EL 处理 null
EL 遇到 null 不会报错,而是输出空字符串,非常安全。
jsp
${notExist}


示例:
jsp
<%-- 获取请求参数 --%>
${param.username}
${paramValues.hobby[0]}
<%-- 获取请求头 --%>
${header["User-Agent"]}
<%-- 获取 Cookie --%>
${cookie.userId.value}
<%-- 获取项目根路径(非常重要) --%>
${pageContext.request.contextPath}
五、综合示例:用 EL 改写用户信息展示页面
传统 JSP(脚本方式,不推荐):
jsp
<%
String name = (String) request.getAttribute("name");
if (name == null) name = "匿名";
%>
姓名:<%= name %>
推荐 JSP(EL 方式):jsp
姓名:${empty name ? "匿名" : name}
姓名:${name}
六、小实战:从 Servlet 传递集合,用 EL 遍历(结合 JSTL) Servlet 代码:java
List
request.setAttribute("cityList", cities);
request.getRequestDispatcher("/cities.jsp").forward(request, response);
cities.jsp(使用 EL + JSTL):
jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach items="${cityList}" var="city">
${city}
</c:forEach>
七、常见错误
忘记设置属性,直接 EL 输出 → 输出空,不会报错,但逻辑可能不对
EL 表达式写在了 JSP 注释里 → 不会执行
混淆了 ${} 和 #{} → ${} 是立即求值,#{} 是延迟求值(JSF 用),JSP 中一般用 ${}
在 JSP 中直接写 EL 但页面显示原样 ${xxx} → 可能 isELIgnored="true" 导致 EL 被禁用,移除该属性或设为 false
浙公网安备 33010602011771号