一、EL表达式简介
- EL表达式全称:Expression Language,即表达式语言
- EL表达式作用:代替JSP页面中表达式脚本进行数据的输出
- EL表达式比JSP的表达式脚本简洁很多
- EL表达式的格式是:${表达式} ,注:EL表达式写在jsp页面中,表达式一般是域对象的key
- EL 表达式在输出null 值的时候,输出的是空串。jsp 表达式脚本输出null 值的时候,输出的是null 字符串 ```html <%@ page contentType=”text/html;charset=UTF-8” language=”java” %>
<%
request.setAttribute(“key”, “值”);
%>
表达式脚本输出key的值是:<%=request.getAttribute(“key1”) == null ? “” : request.getAttribute(“key1”)%>
EL表达式输出key的值是:${key1}
<a name="PJNdI"></a>
## 二、EL表达式搜索域数据的顺序
EL表达式主要是输出域对象中的数据,当四个域对象都有同一个key的值时,EL表达式会按照四个域对象的范围从小到大进行搜索,找到就输出,与四个域对象声明的先后顺序无关
```html
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//往四个域中都保存了相同的key的数据
pageContext.setAttribute("key", "pageContext");
request.setAttribute("key", "request");
session.setAttribute("key", "session");
application.setAttribute("key", "application");
%>
${key}
</body>
</html>
三、EL表达式输出Java类的属性
<%@ page import="com.atguigu.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("cess真的帅");
person.setPhones(new String[]{"18611111111","18622222222","18699998888"});
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的phones数组属性值:${p.phones} <br/>
输出Person的phones数组属性值:${p.phones[0]} <br/>
输出Person的cities集合中的元素值:${p.cities} <br>
输出Person的List集合中个别元素值:${p.cities[2]} <br>
输出Person的Map集合: ${p.map} <br>
输出Person的Map集合中某个key的值: ${p.map.key3} <br>
<%-- 通过getXxx()方法取值,并不需要Javabean中有这个属性 --%>
输出Person的age属性:${p.age} <br>
</body>
</html>
四、EL表达式的运算
1. 关系运算
2. 逻辑运算
3. 算数运算
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>运算符</title>
</head>
<body>
${ 12 == 12 } 或 ${ 12 eq 12 } <br>
${ 12 != 12 } 或 ${ 12 ne 12 } <br>
${ 12 < 12 } 或 ${ 12 lt 12 } <br>
${ 12 > 12 } 或 ${ 12 gt 12 } <br>
${ 12 <= 12 } 或 ${ 12 le 12 } <br>
${ 12 >= 12 } 或 ${ 12 ge 12 } <br>
<hr>
${ 12 == 12 && 12 > 11 } 或 ${ 12 == 12 and 12 > 11 } <br>
${ 12 == 12 || 12 > 11 } 或 ${ 12 == 12 or 12 > 11 } <br>
${ ! true } 或 ${ not true } <br>
<hr>
${ 12 + 12 } <br>
${ 12 - 12 } <br>
${ 12 * 12 } <br>
<%-- 除法会转为浮点型 --%>
${ 18 / 12 } 或 ${ 18 div 12 } <br>
${ 18 % 12 } 或 ${ 18 mod 12 } <br>
</body>
</html>
4. empty运算
empty 运算可以判断一个数据是否为空,如果为空,则输出 true,不为空输出 false。
以下几种情况为空:
- 值为 null 值的时候,为空
- 值为空串的时候,为空
- 值是 Object 类型数组,长度为零
- list 集合,元素个数为零
-
5. 三元运算
表达式 1?表达式 2:表达式 3
表达式1为真返回表达式2的值,表达式1为假返回表达式3的值 ```html <%@ page import=”java.util.List” %> <%@ page import=”java.util.ArrayList” %> <%@ page import=”java.util.HashMap” %> <%@ page import=”java.util.Map” %> <%@ page contentType=”text/html;charset=UTF-8” language=”java” %> <%// 1、值为null值的时候,为空 request.setAttribute("emptyNull", null); // 2、值为空串的时候,为空 request.setAttribute("emptyStr", ""); // 3、值是Object类型数组,长度为零的时候 request.setAttribute("emptyArr", new Object[]{}); // 4、list集合,元素个数为零 List<String> list = new ArrayList<>(); request.setAttribute("emptyList", list); // 5、map集合,元素个数为零 Map<String, Object> map = new HashMap<>(); request.setAttribute("emptyMap", map);
%>
${empty emptyNull}
${empty emptyStr}
${empty emptyArr}
${empty emptyList}
${empty emptyMap}
${(12 == 12) ? “cess真帅” : “cess更帅”}
<a name="Z5a6K"></a>
### 6. “.”点运算和“[ ]”中括号运算
- .点运算,可以输出 Bean 对象中某个属性的值
- []中括号运算,可以输出有序集合中某个元素的值
并且[]中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值
```html
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Map<String,Object> map = new HashMap<>();
map.put("a.a.a", "aaaValue");
map.put("b+b+b", "bbbValue");
map.put("c-c-c", "cccValue");
request.setAttribute("map", map);
%>
${map['a.a.a']} <br/>
${map["b+b+b"]} <br/>
${map['c-c-c']} <br/>
</body>
</html>
五、EL表达式的11个隐含对象
EL 获取四个特定域中的属性
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>scope</title>
</head>
<body>
<%
pageContext.setAttribute("key1", "pageContext1");
pageContext.setAttribute("key2", "pageContext2");
request.setAttribute("key2", "request");
session.setAttribute("key2", "session");
application.setAttribute("key2", "application");
%>
${pageScope.key1} <br/>
${pageScope.key2} <br/>
${requestScope.key2} <br/>
${sessionScope.key2} <br/>
${applicationScope.key2} <br/>
</body>
</html>
pageContext对象的使用
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>pageContext</title>
</head>
<body>
${pageContext} <%--org.apache.jasper.runtime.PageContextImpl@33598e0--%>
${pageContext.servletConfig}
<%--
request.getScheme() 它可以获取请求的协议
request.getServerName() 获取请求的服务器ip或域名
request.getServerPort() 获取请求的服务器端口号
getContextPath() 获取当前工程路径
request.getMethod() 获取请求的方式(GET或POST)
request.getRemoteHost() 获取客户端的ip 地址
session.getId() 获取会话的唯一标识
--%>
<%=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 } <br/><br/>
<%-- 开发中常将几大对象放到pageContext中,如下--%>
<%
pageContext.setAttribute("request", request);
%>
1.协议: ${ request.scheme } <br>
</body>
</html>
其他对象
<%--
Created by IntelliJ IDEA.
User: cess
Date: 2021/6/13
Time: 21:08
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>
<a href="http://localhost:8080/09_el_jstl/i_other_el_obj.jsp?username=cess&password=123456&hobby=java&hobby=python">请求</a> <br/>
输出请求参数username的值:${param.username} <br>
输出请求参数password的值:${param.password} <br>
输出请求参数username的值:${paramValues.username[0]} <br>
输出请求参数hobby的值:${paramValues.hobby[0]} <br>
输出请求参数hobby的值:${paramValues.hobby[1]} <br>
<hr>
输出请求头【User-Agent】的值:${header['User-Agent']} <br>
输出请求头【Connection】的值:${header.Connection} <br>
输出请求头【User-Agent】的值:${headerValues['Accept-Language'][0]} <br>
<hr>
获取Cookie的名称:${cookie.JSESSIONID.name} <br>
获取Cookie的值:${cookie.JSESSIONID.value} <br>
<hr>
输出<Context-param>username的值:${initParam.username} <br>
输出<Context-param>url的值:${initParam.url} <br>
</body>
</html>
web.xml
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql:///test</param-value>
</context-param>