JSP 九大内置对象与 EL 表达式:告别 <%%> 脚本

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

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}
局部截取_20260426_144135

局部截取_20260426_144207

示例:

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 cities = Arrays.asList("北京", "上海", "广州");
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

posted on 2026-04-26 14:20  czkl  阅读(4)  评论(0)    收藏  举报

导航