05_EL.jsp
<%@ page import="com.el.entity.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL 表达式</title>
</head>
<body>
<%--
EL 表达式语法:${变量或表达式}
EL 表达式作用:
jsp 核心语法:jsp表达式 和 jsp脚本;
开发 jsp 的原则:尽量在 jsp 页面中少写 或不写 java 代码;
那么就需要使用其他技术来替代 jsp表达式 和 jsp脚本;
EL 表达式的作用就是用来替代 jsp 表达式,向浏览器输出 "域对象中的" 变量值 或表达式计算的结果;
1、EL 表达式可以输出基本数据类型变量的值
1)、从 四个域 获取
${name}
2)、从 指定域 获取
${pageScope.name}
域范围:pageScope、requestScope、sessionScope、applicationScope;
2、EL 表达式可以输出 对象 及其属性值
3、EL 表达式可以输出集合数据(List 和 Map)
4、EL 表达式可以输出 表达式计算的值
用来替代 jsp 脚本的技术叫 JSP 标签,后面一节讲。
--%>
<%
// 定义一个变量
String name = "rose";
%>
JSP 表达式获取 name 变量的值:<%=name %><br>
EL 表达式获取 name 变量的值:${name} <%-- 取不出来变量的值??因为EL表达式约定,只能获取 域对象中 变量的值 --%>
<hr>
<%
// 将 name 变量放入 page 域中;(EL 表达式只能获取 域对象中 变量的值,放在哪个域都可以,相当于 findAttribute 方法)
pageContext.setAttribute("name", name);
// 将 age 变量放入 request 域中
pageContext.setAttribute("age", "22", PageContext.REQUEST_SCOPE);
%>
EL 表达式从 域对象中 获取 name 变量的值:${name} <%-- 可以获取成功 --%>
<hr>
<%-- EL 表达式还可以从 指定的域中 获取数据 --%>
EL 表达式从 page 域中获取数据:${pageScope.age}<br> <%-- 因为 age 变量在 request 域中,所以从 page 域中获取不到数据 --%>
EL 表达式从 request 域中获取数据:${requestScope.age} <%-- 从 request 域中可以获取到数据 --%>
<hr>
<%--
EL 表达式获取对象 及其属性值
--%>
<%
// 实例化对象
Student student = new Student("Jack", "21");
// 将对象存入域对象中
pageContext.setAttribute("student", student);
%>
student:${student}<br> <%-- 输出对象 --%>
student.name:${student.name}<br> <%-- 输出对象的属性值 --%>
student.age:${student.age}<br>
<%--
${student.name} 等价于:<%=((Student)pageContext.findAttribute("student")).getName() %>>
所以 ${student.name} 并不是直接获取 name 属性的值,而是调用 getName() 方法;
--%>
<hr>
<%--
EL 表达式获取 List 集合中的数据
--%>
<%
// 定义一个 List 集合
List<Student> list = new ArrayList<Student>();
list.add(new Student("rose", "12"));
list.add(new Student("Lucy", "22"));
list.add(new Student("Lily", "32"));
// 将 list 集合放入 域对象中
pageContext.setAttribute("list", list);
%>
list[0]:${list[0]}<br> <%-- 获取 List 集合中第一个元素对象 --%>
list[1]:${list.get(1)}<br> <%-- 获取 List 集合中第二个元素对象(和上面代码作用一样) --%>
list[2].name:${list.get(2).name} <%-- 获取 List 集合中第三个元素对象的name属性的值 --%>
<hr>
<%--
EL 表达式获取 Map 集合中的数据
--%>
<%
// 定义一个 Map 集合
Map<String, Student> map = new HashMap<String, Student>();
map.put("101", new Student("rose", "12"));
map.put("102", new Student("Lucy", "22"));
map.put("103", new Student("Lily", "32"));
// 将 map 集合放入 域对象中
pageContext.setAttribute("map", map);
%>
map["101"]:${map["101"]}<br> <%-- 获取 map 集合中键值为 101 的对象 --%>
map["102"]:${map.get("102")}<br> <%-- 获取 map 集合中键值为 102 的对象,和上面代码的作用一样 --%>
map["103"]:${map.get("103").name} <%-- 获取 map 集合中键值为 103 的对象的 name 属性的值 --%>
<hr>
<%--
EL 表达式获取 表达式的值
--%>
<%-- 算数运行: + - * / --%>
10 + 5 = ${10 + 5}<br>
10 * 5 = ${10 * 5}<br>
<%-- 比较运算:> < <= >= == != --%>
10 > 5 = ${10 > 5}<br>
<%-- 逻辑运算:&&(与) ||(或) !(非) --%>
true && false:${true && false}<br>
true || false:${true || false}<br>
!true:${!true}<br>
<%-- 判空:empty 变量;empty 既可以用来判断 null(空指针),也可以用来判断 空字符串("") --%>
<%
String username = ""; // 空字符串
// String username = null; // 空指针
pageContext.setAttribute("username", username);
%>
判空:${username == null || username == ""}<br>
empty判空:${empty username}
</body>
</html>
Student.java
package com.el.entity;
public class Student {
private String name;
private String age;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age='" + 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;
}
public Student() {
}
public Student(String name, String age) {
this.name = name;
this.age = age;
}
}
输出结果: