EL 表达式是 Expression Language 的缩写,全称为 "Expression Language"。它是一种用于在Java Web应用中访问和操作数据的简化表达式语言。EL 表达式最初是为(JSP)开发的,但后来也被广泛应用于其他基于Java的Web框架。
EL 表达式的语法格式使用${}包裹,其中${}内部可以是一个表达式或者变量名。EL 表达式主要用于在页面中获取和展示数据,执行算术运算,访问JavaBean属性,以及调用JavaBean方法等。
EL 表达式对 JavaBean 的普通属性底层默认进行调用,这是因为 EL 表达式通过 JavaBean 的 getter 方法获取属性的值。在 JavaBean 中,通常会为属性提供公开的 getter 和 setter 方法,用于获取和设置属性的值。EL 表达式使用这些 getter 方法来获取 JavaBean 属性的值。
EL 表达式的语法为 ${beanName.property},其中 beanName 是 JavaBean 的名称,property 是 JavaBean 的属性名称。在获取属性值时,EL 表达式会自动查找 beanName 对象中名为 getProperty 的方法(根据属性名进行转换),然后调用这个方法来获取属性的值。
示例:
假设有一个名为 User 的 JavaBean,其中包含属性 name 和对应的 getter 和 setter 方法:
public class User {
private String name;
// Getter方法
public String getName() {
return name;
}
// Setter方法
public void setName(String name) {
this.name = name;
}
}
在 JSP 中,可以使用 EL 表达式获取 User 对象的 name 属性值:
jsp
${user.name}
上述 EL 表达式 ${user.name} 实际上会调用 user 对象的 getName() 方法,获取 name 属性的值。
总结:EL 表达式对 JavaBean 的普通属性底层默认进行调用,通过调用 JavaBean 的 getter 方法来获取属性的值。这样可以方便地在 JSP 中访问 JavaBean 的属性,而无需直接访问底层的字段。
EL 表达式(Expression Language)支持一系列运算符,包括算术运算、关系运算、逻辑运算、三元运算、点运算(和Java中的基本一致),主要对特有的empty运算和中括号运算进行讲解。
在 EL 表达式(Expression Language)中,empty 运算符用于检查一个值是否为空或为 null。它可以用于各种类型的值,包括字符串、集合、数组和对象等。empty 运算符返回一个布尔值,如果值为空或为 null,则返回 true;否则返回 false。
示例:
假设有以下的 JavaBean 对象:
public class Person {
private String name;
private int age;
private List hobbies;
// Getter 和 Setter 方法省略...
}
在 JSP 页面中,我们可以使用 empty 运算符检查不同类型的值:
jsp
<%-- 定义一个 Person 对象并存储在 request 域中 --%>
<%-- 使用 empty 运算符检查各种类型的值 --%>
Is name empty? ${empty person.name}
<%-- 输出:false --%>
Is age empty? ${empty person.age}
<%-- 输出:false --%>
Is hobbies empty? ${empty person.hobbies}
<%-- 输出:true,因为 hobbies 属性尚未设置 --%>
在 EL 表达式(Expression Language)中,中括号运算用于访问集合(数组、List、Map等)类型的数据。
1. 数组:
对于数组,中括号运算使用索引来获取数组元素。索引从0开始,表示数组中的元素位置。
语法:${array[index]}
示例:
jsp
<%-- 定义一个数组并存储在 request 域中 --%>
<% String[] fruits = {"Apple", "Banana", "Orange"}; %>
First fruit: ${fruits[0]}
<%-- 输出:First fruit: Apple --%>
Last fruit: ${fruits[2]}
<%-- 输出:Last fruit: Orange --%>
2. List:
对于 List,中括号运算同样使用索引来获取 List 中的元素。索引从0开始,表示 List 中的项位置。
语法:${list[index]}
示例:
jsp
<%-- 定义一个 List 并存储在 request 域中 --%>
<% List colors = new ArrayList(); %>
<% colors.add("Red"); %>
<% colors.add("Green"); %>
<% colors.add("Blue"); %>
First color: ${colors[0]}
<%-- 输出:First color: Red --%>
Last color: ${colors[2]}
<%-- 输出:Last color: Blue --%>
3. Map:
对于 Map,中括号运算使用键(Key)来获取 Map 中的值(Value)。
语法:${map[key]}
示例:
jsp
<%-- 定义一个 Map 并存储在 request 域中 --%>
<% Map scores = new HashMap(); %>
<% scores.put("Alice", 85); %>
<% scores.put("Bob", 92); %>
<% scores.put("Charlie", 78); %>
Alice's score: ${scores["Alice"]}
<%-- 输出:Alice's score: 85 --%>
Bob's score: ${scores["Bob"]}
<%-- 输出:Bob's score: 92 --%>
在 JSP(JavaServer Pages)中,EL(Expression Language)提供了11个隐含对象,它们是一些预定义的对象,无需额外声明,可以直接在 JSP 页面中使用。以下是这11个隐含对象及其作用:
1. ${pageContext}:
pageContext 是 JSP 页面的上下文对象,它提供了对其他隐含对象的访问,如 request、session、application 等,以及用于在 JSP 中执行页面转发和包含的方法。
2. ${pageScope}:
pageScope 是 JSP 页面的 PageContext 属性,它用于访问当前页面范围(page scope)的属性。
3. ${requestScope}:
requestScope 是 JSP 页面的 request 属性,它用于访问 request 范围的属性。
4. ${sessionScope}:
sessionScope 是 JSP 页面的 session 属性,它用于访问 session 范围的属性。
5. ${applicationScope}:
applicationScope 是 JSP 页面的 application 属性,它用于访问 application 范围的属性。
6. ${param}:
param 用于获取请求参数的值,它可以通过请求的参数名来获取参数值。
7. ${paramValues}:
paramValues 用于获取请求参数的多个值,比如一个参数名对应多个值的情况,它返回一个 String 数组。
8. ${header}:
header 用于获取请求头信息的值,可以通过请求头的名称来获取请求头的值。
9. ${headerValues}:
headerValues 用于获取请求头信息的多个值,返回一个 String 数组。
10. ${cookie}:
cookie 用于获取客户端传递的 Cookie,可以通过 Cookie 的名称来获取 Cookie 的值。
11. ${initParam}:
initParam 用于获取 Servlet 初始化参数的值,可以通过初始化参数的名称来获取初始化参数的值。