22. EL

EL简介

Expression Language,即表达式语言。el 是 jsp 内置的表达式语言。用以访问页面的上下文(ServletContext)以及不同作用域中的对象。可以取得对象的属性,或执行简单的运算或者判断操作。 el 在得到某个数据时,会自动进行数据类型转换。即 el 只能获取作用域中或者上下文中的值。下面示例是获取不到的。

1
2
3
4
5
<body>
<% int i=1; %>
el: ${ i }
jsp: <%=i %>
</body>

EL 作用

用于替代 JSP 表达式 (<%= %>) 在页面中做输出操作

EL特点

  1. EL 只能读取数据,不能对数据进行修改

  2. 在得到一个数据时,会自动进行类型转换

  3. 如果数据为 null 则什么也不输出,有则输出

EL 与 JSP 表达式的区别

  1. 如果数据为 null,那么 jsp 显示为 null。el 则什么也不显示
  2. el 显示的数据必须存放在域对象或上下文对象中
  3. el 可以数据类型自动转换,jsp 则不行

El 中的域对象

JSP 域对象 EL 域对象 名称
application applicationScope application 域
session sessionScope session 域
request requestScope request 域
pageContext pageScope page 域

EL 使用

el 中如果没有指定变量的取值范围,那么默认的变量取值顺序是从小到大,即 page,request,session,application。获取语法为 ${xx}

创建一个 Student 对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.itguigu.bean;

public class Student {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
public Student(String name, String age) {
super();
this.name = name;
this.age = age;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<%@page import="com.itguigu.bean.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Student student = new Student("zhangsan", "20");
/* 放入 request 域中 */
request.setAttribute("student", student);
%>
<!-- 默认从小到大的范围获取,会输出 -->
${student}
<!-- request域中获取,会输出 -->
${requestScope.student}
<!-- application域中获取,找不到,不会输出 -->
${applicationScope.student}
<!-- session域中获取,找不到,不会输出 -->
${sessionScope.student}
<!-- page域中获取,找不到,不会输出 -->
${pageScope.student}

<!-- 取对象的属性值(属性是有get和set方法的) -->
${requestScope.student.name}
${requestScope.student.age}
</body>
</html>

EL 的11个隐含对象

  1. pageContext,与 jsp 中的 pageContext 作用一样
  2. applicationScope
  3. sessionScope
  4. requestScope
  5. pageScope
  6. param,主要用于获取 get 或者 post 中的请求参数。相当于在 jsp 中使用 request.getParameter() 方法
  7. paramValues
  8. header,获取请求头中的信息
  9. headerValues
  10. initParam,获取 servlet 初始化参数
  11. cookie

(前 5 个和 6,8,11 使用较多)

EL 运算符

el 的运算符和 java 相比,除了具有 java 的运算符外,还有一个 empty 运算符。使用 empty,如果为空则返回 true,否则返回 false。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<% 
String s = "";
request.setAttribute("s", s);

String s1 = null;
request.setAttribute("s1", s1);

List<String> s2 = new ArrayList<String>();
request.setAttribute("s2", s2);
%>
${empty s} <!-- true -->
${empty s1} <!-- true -->
${empty s2} <!-- true -->

${!empty s2} <!-- false -->
${not empty s2} <!-- false -->