目录
1. 什么是EL表达式,有什么作用。
2. EL表达式搜索域数据的顺序
3 EL表达式输出Bean的普通属性,数组属性,List集合属性,map集合属性
1.关系运算
2.逻辑运算
3.算术运算
i. empty 运算
ii. 三元运算
iii. "."运算 和 [] 中括号运算
5. EL表达式的11 个隐含对象
5.1 EL获取四个特定域中的属性
5.2pageContext 对象的使用
5.3 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" %>
Title
<%
request.setAttribute("key","值");
%>
表达式脚本输出key的值是:<%=request.getAttribute("key")%>
EL表达式输出key的值是:${key}
表达式脚本输出key的值是:<%=request.getAttribute("key1")%>
EL表达式输出key的值是:${key1}
EL 表达式的格式是:${表达式}
EL表达式在输出 null 值的时候,输出的是空串。jsp表达式脚本输出null的时候,输出的是null字符串。
输出结果:
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" %>
Title
<%
pageContext.setAttribute("key","pageContext");
request.setAttribute("key","request");
session.setAttribute("key","session");
application.setAttribute("key","application");
%>
${key}
当四个域中都有相同的key的数据的时候,EL表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。跟代码的顺序没有关系。
从小到大顺序:pageContext——> request ——> session ——> application
<%@ 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" %>
Title
<%
Person person = new Person();
person.setName("海绵宝宝");
person.setPhones(new String[]{"18881234567","18887654321" ,"18881234561"});
List cities = new ArrayList();
cities.add("北京");
cities.add("上海");
cities.add("深圳");
person.setCities(cities);
Map map = new HashMap();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
person.setMap(map);
pageContext.setAttribute("p",person);
%>
输出person:${p}
输出person的name属性:${p.name}
输出person的phones数组属性:${p.phones[2]}
输出person的cities的list集合属性:${p.cities}
输出person的cities的list集合中元素:${p.cities[2]}
输出person的map集合:${p.map}
输出person的map集合中元素:${p.map.key1}
输出结果:
empty运算可以判断一个数据是否为空,如果为空则输出true ,不为空输出false。
以下几种情况为空:
1.值为null的时候,为空;
2.值为空串的时候,为空;
3.置位Object类型数组,长度为零的的时候;
4.list集合,元素个数为零;
5.map集合,元素个数为零;
<%
//1.值为null的时候,为空;
request.setAttribute("key1",null);
//2.值为空串的时候,为空;
request.setAttribute("key2","");
//3.置位Object类型数组,长度为零的的时候;
request.setAttribute("key3",new Object[]{});
//4.list集合,元素个数为零;
List list = new ArrayList();
list.add("1");
request.setAttribute("key4",list);
//5.map集合,元素个数为零;
Map map = new HashMap();
map.put("100","100");
request.setAttribute("key5",map);
%>
${empty key1}
${empty key2}
${empty key3}
${empty key4}
${empty key5}
输出结果:
表达式 1 ? 表达式2: 表达式3
如果表达式1 为true,则返回表达式2的值;值为false,则返回表达式3的值。
${ 12 == 12 ? "你真可爱true":"你很漂亮false"}
. 点运算,可以输出Bean对象中某个属性的值。
[] 中括号运算,可以输出有序集合中某个元素的值。
并且 [] 中括号运算,还可以输出map集合中key 里含有特殊字符的key的值。
<%
Map map = new HashMap();
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 }
${ map.aaa }
${ map['a.a.a'] }
${ map["b+b+b"] }
输出结果:
EL表达式中11 个隐含对象,是EL表达式中自己定义的,可以直接使用。
变量 | 类型 | 作用 |
pageContext | PageContextImplements | 获取jsp中的九大内置对象 |
pageScope | Map |
获取pageContext 域中的数据 |
requestScope | Map |
获取Request 域中的数据 |
sessionScope | Map |
获取session 域中的数据 |
applicationScope | Map |
获取ServletContext 域中的数据 |
param | Map |
获取请求参数的值 |
paramValues | Map |
获取请求参数的值,获取多个值的时候使用 |
header | Map |
他可以获取请求头的信息 |
headerValues | Map |
获取请求头的信息,可以获取多个值的情况 |
cookie | Map |
获取当前请求的Cookie 信息 |
initParam | Map |
获取在web.xml 中配置的 |
pageScope ==== pageContext 域
requestScope ==== Request 域
sessionScope ==== Session域
applicationScope ==== ServletContext 域
<%
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}
${requestScope.key1}
${sessionScope.key2}
${applicationScope.key1}
${pageContext.getAttribute("key1")}
输出结果:
1. 协议;
2. 服务器ip;
3. 服务器端口;
4. 获取工程路径;
5. 获取请求方法;
6. 获取客户端ip地址;
7. 获取会话的id编号;
${pageContext}
<%-- request.getScheme()可以获取请求的协议
request.getServerName() 获取请求的服务器ip或域名
request.getServerPort() 获取请求的服务器端口号
request.getContextPath() 获取当前工程路径
request.getMethod() 获取请求的方式(get或post)
request.getRemoteHost() 获取客户端的ip地址
session.getId() 获取会话的唯一标识
--%>
<%=session.getId()%>
1. 协议;${pageContext.request.scheme}
2. 服务器ip;${pageContext.request.serverName}
3. 服务器端口;${pageContext.request.serverPort}
4. 获取工程路径;${pageContext.request.contextPath}
5. 获取请求方法;${pageContext.request.method}
6. 获取客户端ip地址;${pageContext.request.remoteHost}
7. 获取会话的id编号;${pageContext.session.id}
输出结果:
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
param 和 paramValues
输出请求参数username的值:${param.username}
输出请求参数password的值:${param.password}
输出请求参数hobby的值:${param.hobby}
输出请求参数username的值:${paramValues.username[0]}
输出请求参数hobby的值:${paramValues.hobby[1]}
输出结果:
header 和 headerValues
输出请求头【user-Agent】的值:${header['user-Agent']}
输出请求头【connection】的值:${header.connection}
输出请求头【user-Agent】的值:${headerValues['user-Agent'][0]}
输出结果:
cookie
${cookie}
获取cookie的名称:${cookie.JSESSIONID.name}
获取cookie的值 :${cookie.JSESSIONID.value}
输出结果:
initParam
${initParam}
输出Context-param的值:${initParam.username}
输出Context-param的值:${initParam.url}
输出结果:
{url=jdbc:mayql://localhost/test, username=root}
输出Context-param的值:root
输出Context-param的值:jdbc:mayql://localhost/test