目录
什么是 JSP 表达式语言
JSP 表达式语言 (Expression Language, 简称 EL) 是一种在 JSP 页面中访问数据和执行简单计算的轻量级语言,引入于 JSP 2.0。它使用 ${表达式}
的形式,直接嵌入 JSP 页面,用于替代传统的脚本表达式(如 <%= %>
)。EL 的设计目标是简化数据访问,使页面更简洁,避免过多 Java 代码。
为什么要使用表达式语言
- 简洁性:比脚本表达式更直观,无需
out.print()
或<%= %>
。 - 安全性:自动处理空值,避免 NullPointerException。
- MVC 兼容:与 JavaBean 和作用域对象无缝集成,适合模型-视图分离。
- 易用性:前端开发者无需掌握 Java 即可使用。
表达式语言的基本语法
- 基本格式:
${表达式}
,例如${user.name}
。 - 点号 (.) 和方括号 ([]) 操作符:
${user.name}
:访问对象的属性。${user["name"]}
:等价于点号,支持动态键。- 支持类型:访问 JavaBean 属性、集合 (List/Map)、作用域变量等。
- 默认值:若表达式结果为
null
,输出空字符串而非 “null”。
代码示例
JavaBean 示例
创建一个简单的 JavaBean 类 User
:
package com.example;
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Getter 和 Setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
JSP 中使用 EL
在 JSP 中结合 Servlet 和 EL 显示数据:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP 表达式语言示例</title>
</head>
<body>
<h1>用户信息</h1>
<%
// Servlet 或其他逻辑设置数据
com.example.User user = new com.example.User("张三", 25);
request.setAttribute("user", user);
%>
<!-- 使用 EL 显示数据 -->
<p>姓名:${user.name}</p>
<p>年龄:${user.age}</p>
<!-- 表单参数示例 -->
<form method="post">
<label>输入姓名:<input type="text" name="inputName"></label>
<input type="submit" value="提交">
</form>
<p>表单输入:${param.inputName}</p>
</body>
</html>
运行结果:
- 初始显示:
姓名:张三
和年龄:25
。 - 提交表单后,
表单输入
显示用户输入的姓名。
EL 的作用域与隐式对象
EL 可以访问 JSP 的作用域变量(pageScope
、requestScope
、sessionScope
、applicationScope
)和隐式对象。
作用域
${user}
:自动按page
→request
→session
→application
顺序查找。- 指定作用域:
${requestScope.user.name}
。
常用隐式对象
隐式对象 | 描述 | 示例 |
---|---|---|
param | 获取请求参数 | ${param.inputName} |
sessionScope | 访问会话作用域 | ${sessionScope.user} |
requestScope | 访问请求作用域 | ${requestScope.user} |
pageContext | 访问页面上下文 | ${pageContext.request.method} |
header | 获取请求头 | ${header["User-Agent"]} |
操作符与功能
EL 支持多种操作符:
- 算术:
+
,-
,*
,/
,%
(例如${user.age + 5}
)。 - 关系:
==
,!=
,<
,>
,<=
,>=
(例如${user.age > 20}
)。 - 逻辑:
&&
,||
,!
(例如${user.age > 18 && user.name != null}
)。 - 空检查:
empty
(例如${empty param.inputName}
返回 true/false)。 - 三元运算:
${条件 ? 值1 : 值2}
(例如${user.age > 18 ? "成人" : "未成年"}
)。
优点与应用场景
优点
- 简洁优雅:代码更少,页面更干净。
- 空值安全:无需手动检查 null。
- 灵活性:支持动态属性和集合操作。
应用场景
- 显示动态数据(如用户信息、列表)。
- 处理表单输入(直接访问
param
)。 - 条件渲染(结合逻辑操作符)。
常见问题与注意事项
- EL 被禁用:
- 检查
<%@ page isELIgnored="true" %>
,应设为false
(默认)。
- 作用域冲突:
- 同名变量可能被意外覆盖,使用明确作用域(如
requestScope
)解决。
- 类型转换:
- EL 自动将字符串转换为数字(如
${"10" + 5}
输出 15),但需注意异常情况。
- 调试困难:
- EL 表达式出错不会抛出明显异常,建议日志记录或逐步测试。
- 编码问题:
- 确保 JSP 文件和响应编码一致(如
UTF-8
),避免乱码。
参考资料与出站链接
- 官方文档:
- Java EE 8 EL 规范(英文)
- Oracle JSP EL 教程(英文)
- 学习资源:
- W3Schools EL 教程(英文)
- CSDN JSP EL 详解(中文)
- 工具支持:
- Apache Tomcat:支持 EL 的运行环境。
如果您需要更复杂的 EL 示例(例如集合操作或自定义函数),请告诉我,我会进一步扩展!
发表回复