EL表达式的作用:代替jsp页面的表达式脚本在jsp页面输出数据
EL表达式的格式:${表达式}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setAttribute("key","value");
%>
使用jsp表达式脚本输出:<%=request.getAttribute("key")%> <br/>
使用EL表达式输出:${key}
</body>
</html>
一. EL表达式 —— 获取四个保存作用域的值
当四个作用域都有相同的key时, EL表达式就按照四个域的大小顺序进行搜索,找到后就输出。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
pageContext.setAttribute("key","pageContext");
request.setAttribute("key","request");
session.setAttribute("key","session");
application.setAttribute("key","application");
%>
${key}
</body>
</html>
二. EL表达式 —— 输出Bean的普通属性、数组属性、List集合属性、map集合属性
package pojo;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class Person {
private String name;
private String[] phones;
private List<String> cities;
private Map<String,Object> map;
public Person() {
}
public Person(String name, String[] phones, List<String> cities, Map<String, Object> map) {
this.name = name;
this.phones = phones;
this.cities = cities;
this.map = map;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String[] getPhones() {
return phones;
}
public void setPhones(String[] phones) {
this.phones = phones;
}
public List<String> getCities() {
return cities;
}
public void setCities(List<String> cities) {
this.cities = cities;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", phones=" + Arrays.toString(phones) +
", cities=" + cities +
", map=" + map +
'}';
}
}
<%@ page import="pojo.Person" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Person person = new Person();
person.setName("Tom");
person.setPhones(new String[]{"13591496312","12348759831","18954732564"});
List<String> cities = new ArrayList<>();
cities.add("北京");
cities.add("上海");
cities.add("杭州");
person.setCities(cities);
Map<String,Object> map = new HashMap<>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
person.setMap(map);
pageContext.setAttribute("p",person);
%>
输出Person:${p} <br/>
输出Person的name属性:${p.name} <br/> <!-- 因为Person类里有get方法,所以才能输出,下面同理 -->
输出Person的phones数组中的元素值:${p.phones[0]} <br/>
输出Person的cities集合:${p.cities} <br/>
输出Person的cities集合中的元素值:${p.cities[1]} <br/>
输出Person的Map集合:${p.map} <br/>
输出Person的Map集合中某个key的值:${p.map.key2} <br/>
</body>
</html>
三. EL表达式 —— 运算
1. 关系运算
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${12 == 12} <br/> <!-- true -->
${12 != 12} <br/> <!-- false -->
${12 < 12} <br/> <!-- false -->
${12 > 12} <br/> <!-- false -->
${12 <= 12} <br/> <!-- true -->
${12 >= 12} <br/> <!-- true -->
</body>
</html>
2. 逻辑运算
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${12 == 12 && 13 < 12} <br/> <!-- false -->
${12 == 12 || 13 < 12} <br/> <!-- true -->
${! true} <br/> <!-- false -->
</body>
</html>
3. 算数运算
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${12 + 13} <br/> <!-- 25 -->
${12 - 2} <br/> <!-- 10 -->
${12 * 12} <br/> <!-- 144 -->
${12 / 5} <br/> <!-- 2.4 -->
${12 % 5} <br/> <!-- 2 -->
</body>
</html>
4. empty运算:判断一个数据是否为空,如果为空则输出true,否则输出false
以下几种情况为空:①值为null;②值为空串;③值是Object类型数组,长度为零;④list集合,元素个数为0;⑤map集合,元素个数为0
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//1.值为null
request.setAttribute("key1",null);
//2.值为空串
request.setAttribute("key2","");
//3.值是Object类型数组,长度为零
request.setAttribute("key3",new Object[]{});
//list集合,元素个数为0
request.setAttribute("key4",new ArrayList<String>());
//map集合,元素个数为0
request.setAttribute("key5",new HashMap<String,Object>());
%>
${empty key1} <br/>
${empty key2} <br/>
${empty key3} <br/>
${empty key4} <br/>
${empty key5} <br/>
</body>
</html>
5.三元运算
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${12 == 12 ? "yes":"no"}
</body>
</html>
四. EL表达式中的隐含对象
EL表达式中的11个隐含对象是EL表达式中自己定义的,可以直接使用。
变量 | 类型 | 作用 |
pageContext | pageContextImpl | 获取jsp中的九大内置对象 |
pageScope | Map<String,Object> | 获取pageContext域中的数据 |
requestScope | Map<String,Object> | 获取request域中的数据 |
sessionScope | Map<String,Object> | 获取session域中的数据 |
applicationScope | Map<String,Object> | 获取servletContext域中的数据 |
param | Map<String,String> | 获取请求参数的值 |
paramValues | Map<String,String[]> | 获取请求参数的值,多个值时使用 |
header | Map<String,String> | 获取请求头的信息 |
headerValues | Map<String,String[]> | 获取请求头的信息,多个值时使用 |
cookie | Map<String,Cookie> | 获取当前请求的cookie信息 |
initParam | Map<String,String> | 获取在web.xml中配置的<context-param>上下文参数 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
1.协议:${pageContext.request.scheme} <br/>
2.服务器ip:${pageContext.request.serverName} <br/>
3.服务器端口:${pageContext.request.serverPort} <br/>
4.获取工程路径:${pageContext.request.contextPath} <br/>
5.获取请求方法:${pageContext.request.method} <br/>
6.获取客户端ip地址:${pageContext.request.remoteHost} <br/>
7.获取会话id编号:${pageContext.session.id} <br/>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
pageContext.setAttribute("key","pageContext");
request.setAttribute("key","request");
session.setAttribute("key","session");
application.setAttribute("key","application");
%>
${pageScope.key} <br/>
${requestScope.key} <br/>
${sessionScope.key} <br/>
${applicationScope.key} <br/>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${param} <br/>
${paramValues} <br/>
${header} <br/>
${headerValues} <br/>
${cookie} <br/>
${initParam} <br/>
</body>
</html>