目录
3 EL表达式输出Bean的普通属性,数组属性,List集合属性,map集合属性
1. 什么是EL表达式,有什么作用。
EL表达式全称:Expression Language ,是表达式语言。
EL表达式的作用:EL表达式主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出。因为EL表达式在输出数据的时候,要比jsp的表达式简洁很多。
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/12/13
Time: 20:03
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","值");
%>
表达式脚本输出key的值是:<%=request.getAttribute("key")%><br/>
EL表达式输出key的值是:${key}<br/>
表达式脚本输出key的值是:<%=request.getAttribute("key1")%><br/>
EL表达式输出key的值是:${key1}<br/>
</body>
</html>
EL 表达式的格式是:${表达式}
EL表达式在输出 null 值的时候,输出的是空串。jsp表达式脚本输出null的时候,输出的是null字符串。
输出结果:
2. EL表达式搜索域数据的顺序
EL 表达式主要是在jsp页面中输出数据。
主要是输出域对象中的数据。
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/12/13
Time: 20:15
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>
当四个域中都有相同的key的数据的时候,EL表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。跟代码的顺序没有关系。
从小到大顺序:pageContext——> request ——> session ——> application
3 EL表达式输出Bean的普通属性,数组属性,List集合属性,map集合属性
<%@ page import="com.atguigu.pojo.Person" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/12/13
Time: 20:33
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("海绵宝宝");
person.setPhones(new String[]{"18881234567","18887654321" ,"18881234561"});
List<String> cities = new ArrayList<String>();
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("p",person);
%>
输出person:${p}<br/>
输出person的name属性:${p.name}<br/>
输出person的phones数组属性:${p.phones[2]}<br/>
输出person的cities的list集合属性:${p.cities}<br/>
输出person的cities的list集合中元素:${p.cities[2]}<br/>
输出person的map集合:${p.map}<br/>
输出person的map集合中元素:${p.map.key1}<br/>
</body>
</html>
输出结果:
1.关系运算
2.逻辑运算
3.算术运算
i. empty 运算
empty运算可以判断一个数据是否为空,如果为空则输出true ,不为空输出false。
以下几种情况为空:
1.值为null的时候,为空;
2.值为空串的时候,为空;
3.置位Object类型数组,长度为零的的时候;
4.list集合,元素个数为零;
5.map集合,元素个数为零;
<body>
<%
//1.值为null的时候,为空;
request.setAttribute("key1",null);
//2.值为空串的时候,为空;
request.setAttribute("key2","");
//3.置位Object类型数组,长度为零的的时候;
request.setAttribute("key3",new Object[]{});
//4.list集合,元素个数为零;
List<String> list = new ArrayList<String>();
list.add("1");
request.setAttribute("key4",list);
//5.map集合,元素个数为零;
Map<String,Object> map = new HashMap<String,Object>();
map.put("100","100");
request.setAttribute("key5",map);
%>
${empty key1}<br/>
${empty key2}<br/>
${empty key3}<br/>
${empty key4}<br/>
${empty key5}<br/>
</body>
输出结果:
ii. 三元运算
表达式 1 ? 表达式2: 表达式3
如果表达式1 为true,则返回表达式2的值;值为false,则返回表达式3的值。
${ 12 == 12 ? "你真可爱true":"你很漂亮false"}
iii. "."运算 和 [] 中括号运算
. 点运算,可以输出Bean对象中某个属性的值。
[] 中括号运算,可以输出有序集合中某个元素的值。
并且 [] 中括号运算,还可以输出map集合中key 里含有特殊字符的key的值。
<body>
<%
Map<String,Object> map = new HashMap<String,Object>();
map.put("aaa","aaaValue");
map.put("bbb","bbbValue");
map.put("ccc","cccValue");
map.put("a.a.a","aaaValue");
map.put("b+b+b","bbbValue");
request.setAttribute("map",map);
%>
${ map }<br/>
${ map.aaa }<br/>
${ map['a.a.a'] }<br/>
${ map["b+b+b"] }<br/>
</body>
输出结果:
5. EL表达式的11 个隐含对象
EL表达式中11 个隐含对象,是EL表达式中自己定义的,可以直接使用。
变量 | 类型 | 作用 |
pageContext | PageContextImplements | 获取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>上下文参数 |
5.1 EL获取四个特定域中的属性
pageScope ==== pageContext 域
requestScope ==== Request 域
sessionScope ==== Session域
applicationScope ==== ServletContext 域
<body>
<%
pageContext.setAttribute("key1","pageContext1");
pageContext.setAttribute("key2","pageContext2");
request.setAttribute("key1","request1");
request.setAttribute("key2","request2");
session.setAttribute("key1","session1");
session.setAttribute("key2","session2");
application.setAttribute("key1","application1");
application.setAttribute("key2","application2");
%>
${pageScope.key1}<br/>
${requestScope.key1}<br/>
${sessionScope.key2}<br/>
${applicationScope.key1}<br/>
${pageContext.getAttribute("key1")}<br/>
</body>
输出结果:
5.2pageContext 对象的使用
1. 协议;
2. 服务器ip;
3. 服务器端口;
4. 获取工程路径;
5. 获取请求方法;
6. 获取客户端ip地址;
7. 获取会话的id编号;
<body>
${pageContext}
<%-- request.getScheme()可以获取请求的协议
request.getServerName() 获取请求的服务器ip或域名
request.getServerPort() 获取请求的服务器端口号
request.getContextPath() 获取当前工程路径
request.getMethod() 获取请求的方式(get或post)
request.getRemoteHost() 获取客户端的ip地址
session.getId() 获取会话的唯一标识
--%>
<%=session.getId()%> <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/>
</body>
输出结果:
org.apache.jasper.runtime.PageContextImpl@57e2440f AD9830CA246B7763FBE5A452DF6E487D
1. 协议;http
2. 服务器ip;192.168.5.41
3. 服务器端口;8080
4. 获取工程路径;/09_EL_JSTL
5. 获取请求方法;GET
6. 获取客户端ip地址;192.168.5.41
7. 获取会话的id编号;AD9830CA246B7763FBE5A452DF6E487D
5.3 EL表达式其他隐含对象的使用
param 和 paramValues
<body>
输出请求参数username的值:${param.username} <br/>
输出请求参数password的值:${param.password} <br/>
输出请求参数hobby的值:${param.hobby} <br/>
输出请求参数username的值:${paramValues.username[0]}<br/>
输出请求参数hobby的值:${paramValues.hobby[1]}<br/>
</body>
输出结果:
header 和 headerValues
输出请求头【user-Agent】的值:${header['user-Agent']}<br/>
输出请求头【connection】的值:${header.connection}<br/>
输出请求头【user-Agent】的值:${headerValues['user-Agent'][0]}<br/>
输出结果:
cookie
${cookie}<br/>
获取cookie的名称:${cookie.JSESSIONID.name}<br/>
获取cookie的值 :${cookie.JSESSIONID.value}<br/>
输出结果:
initParam
${initParam}<br/>
输出Context-param的值:${initParam.username}<br/>
输出Context-param的值:${initParam.url}<br/>
输出结果:
{url=jdbc:mayql://localhost/test, username=root}
输出Context-param的值:root
输出Context-param的值:jdbc:mayql://localhost/test