EL概念 | EL语法 | EL作用 |
---|---|---|
英文名称:Expression Language 中文名称:表达式语言 |
${ 变量名或表达式 } | 1.用于输出作用域中变量值 2.用于各种运算:算术,逻辑,关系,三元运算等 |
区别 | JSP脚本表达式 | EL |
---|---|---|
语法 | <%=m%> | ${m} |
输出哪里的值 | 输出的是脚本变量 <% int m= 5; %> |
输出的是作用域中的值 <% request.setAttribute(“m”, 5); %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--基本使用方式--%>
<html>
<head>
<title>Play</title>
</head>
<body>
<%
int m=6;
// 向请求域中添加一个变量
request.setAttribute("num", 8);
%>
输出m:
<%=m%><br>
输出作用域中值:
<%= request.getAttribute("num")%><br>
使用 EL 表达式输出:
${num}
</body>
</html>
实体类
package com.domain;
import java.math.BigDecimal;
public class Employee {
private String name;
private BigDecimal salary;
public Employee() {
}
public Employee(String name, BigDecimal salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getSalary() {
return salary;
}
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", salary=" + salary +
'}';
}
}
jsp
<%@ page import="com.domain.Employee" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.math.BigDecimal" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL取值</title>
</head>
<body>
<%
// 创建员工对象
Employee emp = new Employee("大黄", new BigDecimal("8848"));
// 存到页面域中
pageContext.setAttribute("emp", emp);
%>
<h3>取JavaBean的属性值</h3>
<%-- 本质上是调用 get方法 --%>
姓名:${emp.name}-->${emp.getName()}-->${emp["name"]},薪水:${emp.salary}
<hr>
<%
List<String> names = Arrays.asList("大黄", "小黄","小小黄");
// 放在请求域中
request.setAttribute("names",names);
%>
<h3>取集合中元素</h3>
${names[0]} --> ${names[1]}
<%
int[] nums = {2,30,400,8};
// 数组放在请求域
request.setAttribute("nums", nums);
%>
<h2>取数组中元素</h2>
${nums[0]} ${nums[3]}
<%
Map<String, String> map = new HashMap<>();
map.put("emp1", "大黄");
map.put("emp2", "小黄");
map.put("emp3", "小小黄");
//放在请求域
request.setAttribute("map",map);
%>
<h2>取Map中元素</h2>
<%-- map对象.键名 --%>
${map.emp1} --> ${map.emp2} --> ${map["emp3"]}
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--EL中只要字符串是数值都会执行算术运行--%>
<html>
<head>
<title>EL算数表达式</title>
</head>
<body>
<%
request.setAttribute("a", "6");
request.setAttribute("b", "8");
%>
${a+b},${a*b},${a/b},${a%b}
${1 + 1} , ${2 - 1}
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL比较表达式</title>
</head>
<body>
<h2>比较运算符</h2>
${1 eq 1}<br>
${1 != 1}<br>
${1 lt 2}<br>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL逻辑表达式</title>
</head>
<body>
<h2>逻辑运算符</h2>
${true and false}<br>
${true || false}<br>
${not true}<br>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL三元</title>
</head>
<body>
<h2>三元运算符</h2>
${5>6?"T":"F"}
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--变量名在作用域中为空,不存在,返回true--%>
<%--变量名为空串,返回true--%>
<%--变量名是集合,若集合中没有元素,返回true--%>
<html>
<head>
<title>EL判空表达式</title>
</head>
<body>
<h2>判空表达式</h2>
<%--判空,判断的是内容是否为空,不是对象是否为空--%>
${empty aaa} <br>
<%
pageContext.setAttribute("emp1","");
// 集合中没有元素
List<String> names = new ArrayList<>();
names.add("大黄");
pageContext.setAttribute("emp2", names);
%>
${empty emp1}<br>
${empty emp2}<br>
</body>
</html>
EL 从 4 个作用域对象中获取数据是,从小到大的顺序去获取,若要指定作用域获取数据,可使用以下 EL 的内置对象来指定。
JSP 本质是 Servlet,但比 Servlet 多了一个作用域:pageContext 页面域(只在一个JSP页面中起作用,不同的JSP之间不能实现数据的共享,比请求域范围还要小)
PageContext 操作方法 | 说明 |
---|---|
void setAttribute(String key, Object value) | 向页面域中添加键和值 |
Object getAttribute(String key) | 从页面域中得到值 |
void removeAttribute(String key) | 删除四个域中同名的键 |
Object findAttribute(String key) | 按从小到大的范围从四个作用域中来查找某个键,找到就停止,没有找到则返回null |
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL指定域获取数据</title>
</head>
<body>
<%
// 于页面域中添加一个字符串
pageContext.setAttribute("name", "页面域");
// 请求域
request.setAttribute("name", "请求域");
// 会话域
session.setAttribute("name", "会话域");
// 上下文域
application.setAttribute("name", "上下文域");
%>
从页面域获取:${pageScope.name}<br>
从请求域获取:${requestScope.name}<br>
从会话域获取:${sessionScope.name}<br>
从上下文域获取:${applicationScope.name}<br>
自动查找作用域获取:${name}
</body>
<%--从页面域获取:页面域
从请求域获取:请求域
从会话域获取:会话域
从上下文域获取:上下文域
自动查找作用域获取:页面域--%>
</html>
作用域 | 语法 |
---|---|
页面域 | ${pageScope.键名} |
请求域 | ${requestScope.键名} |
会话域 | ${sessionScope.键名} |
上下文域 | ${applicationScope.键名} |