什么是EL表达式?EL表达式的作用
- EL表达式的全称是:Expression Language 表达式语言
- 表达式有什么作用:EL表达式主要是替代jsp页面中的表达式脚本在jsp页面中进行数据的输出
- 因为EL表达式在输出数据的时候,要比jsp的表达式脚本要简洁很多
- EL表达式的格式:${表达式}
<%--
Created by IntelliJ IDEA.
User: x2773
Date: 2021/11/18
Time: 13:23
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setAttribute("key","value");
%>
表达式脚本输出key的值为:<%= request.getAttribute("key1")%><br>
El表达式输出key的值为:${key1}
</body>
</html>
表达式脚本输出null用户是看不懂的,会一位那就是一个输出的值,所以EL表达式有这个优势
EL表达式搜索域数据的顺序
- EL表达式主要在jsp页面中输出数据,
- 主要是输出域对象中的数据
- 当四个域都有相同的key的数据的时候,EL表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。pageContext、request、session、application
<%--
Created by IntelliJ IDEA.
User: x2773
Date: 2021/11/18
Time: 13:54
To change this template use File | Settings | File Templates.
--%>
<%@ 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集合属性
<%@ page import="com.atguigu.pojo.Person" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %><%--
Created by IntelliJ IDEA.
User: x2773
Date: 2021/11/18
Time: 14:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Person person = new Person();
person.setName("zhangsan");
person.setPhones(new String[]{"17641244845","18685720121","18185705960"});
List<String> cities = new ArrayList<>();
cities.add("沈阳");
cities.add("大连");
cities.add("鞍山");
person.setCities(cities);
Map<String,Object> map = new HashMap<String,Object>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
person.setMap(map);
pageContext.setAttribute("person",person);
%>
输出Person:${person}<br>
输出Person的name属性:${person.name}<br>//name找的是getName()方法
输出Person的phones数组属性值:${person.phones[0]}<br>
输出Person的cities集合中的元素属性值:${person.cities}<br>
输出Person的cities集合中的某个元素属性值:${person.cities[0]}<br>
输出Person的map集合属性值:${person.map}<br>
输出Person的map集合中某个key值:${person.map.key1}
</body>
</html>
EL表达式--运算
语法:${运算表达式}
1、关系运算
2、逻辑运算
3、算术运算
4、empty运算
格式:${empty 要判断的数据}
empty运算可以判断一个数据是否为空,为空输出true,不为空输出false
<%--
Created by IntelliJ IDEA.
User: x2773
Date: 2021/11/18
Time: 14:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setAttribute("nullKey",null);
%>
${empty nullKey}
</body>
</html>
5、三元运算
${12 == 12 ? "今天天气很好":"今天天气还不错哦哦"}
6、点运算和中括号运算
- 点运算,可以输出Bean对象中的某个属性的值
- []中括号运算,可以输出有序集合中某个元素的值
- 并且中括号运算可以输出map集合中key里含有特殊字符的key值
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %><%--
Created by IntelliJ IDEA.
User: x2773
Date: 2021/11/18
Time: 14:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Map<String,Object> map = new HashMap<String,Object>();
map.put("key.1","value1");
map.put("key-2","value2");
map.put("key+3","value3");
%>
输出map:${map}<br>
输出key1:${map[key.1]}<br>
输出key2:${map["key-2"]}<br>
输出key3:${map['key+3']}
</body>
</html>
EL表达式中隐含的11个对象
EL表达式中隐含的11个对象,是EL自己定义的可以直接使用
EL获取四个特定域中的属性
解决了四个特定域中key值相同的问题
<%--
Created by IntelliJ IDEA.
User: x2773
Date: 2021/11/18
Time: 15:37
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
pageContext.setAttribute("key1","value1");
request.setAttribute("key1","value1");
session.setAttribute("key1","value1");
application.setAttribute("key1","value1");
%>
${requestScope}
${pageScope.key1}
${requestScope.ke1}
${sessionScope.ke1}
${applicationScope.ke1}
</body>
</html>
EL表达式-pageContext演示
${pageCoontext.jsp的九大内置对象}
pageContext的使用
<%--
Created by IntelliJ IDEA.
User: x2773
Date: 2021/11/18
Time: 15:37
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--request.getScheme() 可以获取请求的协议--%>
<%=request.getScheme()%><br>
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}
</body>
</html>
EL表达式其他隐含对象的使用
结果: