EL表达式知识
什么是EL表达式,EL表达式作用?
EL表达式是表达式语言
EL表达式主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出。
因为EL表达式在输出数据的时候,要比jsp的表达式脚本要简洁很多
<%request.setAttribute("key","值");
%>
表达式脚本输出的key的值是:<%=request.getAttribute("key")%><br>
EL表达式输出key的值是:${key}
EL表达式的格式是:${表达式}
EL表达式在输出null值的时候,输出的是空串。jsp表达式脚本输出null值的时候,输出的是null字符串。
EL表达式搜索域数据的顺序
EL表达式主要是在jsp页面输出数据
主要是输出域对象中的数据
当四个域当中都有相同的key数据的时候,EL表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出
EL表达式输出Bean得到普通属性,数组属性。List集合属性,map集合属性
需求输出Person类中普通属性,数组属性。List集合属性和map集合属性
定义一个person类
package com.guigu.pojo;import java.util.Arrays;
import java.util.List;
import java.util.Map;public class Person {//输出Person类中普通属性,数组属性。List集合属性和map集合属性private int age;private String[] phones;private List<String> cities;private Map<String,Object> map;public Person() {}public Person(int age, String[] phones, List<String> cities, Map<String, Object> map) {this.age = age;this.phones = phones;this.cities = cities;this.map = map;}@Overridepublic String toString() {return "Person{" +"age=" + age +", phones=" + Arrays.toString(phones) +", cities=" + cities +", map=" + map +'}';}public int getAge() {return age;}public void setAge(int age) {this.age = age;}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;}
}
jsp页面设置属性值并输出
<%@ page import="com.guigu.pojo.Person" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--Created by IntelliJ IDEA.User: AdministratorDate: 2021/11/10Time: 21:04To 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.setAge(18);person.setPhones(new String[]{"110","120","119"});List<String> cities=new ArrayList<>();cities.add("郑州");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");map.put("key4","value4");person.setMap(map);pageContext.setAttribute("person",person);
%>
输出Person:${person}<br>
输出person的age属性:${person.age}<br>
输出Person的cities属性:${person.cities}<br>
输出Person的pnones数组属性值:${person.phones[0]}<br><!--在后面加上[下标]输出某个属性至-->
输出person的map集合:${person.map}
输出map集合中某个key的值:${person.map.key1}<!--在map后面加上“.键名”即可-->
</body>
</html>
EL表达式--运算
语法:${运算表达式},EL表达式支持如下运算符
1、关系运算
2、逻辑运算
3、算数运算
empty运算
empty运算可以判断一个数据是否为空,如果为空,则输出true,不为空输出false
以下几种情况为空:
1、值为null值的时候,为空
2、值为空串的时候,为空
3、值是Object类型数组,长度为零的时候
4、list集合,元素个数为零
5、map集合,元素个数为零
<%request.setAttribute("emptyNull",null);
%>
${empty emptyNull}
三元运算
表达式1?表达式2:表达式3
如果表达式1的值为真,返回表达式2的值, 如果表达式1的值为假,返回表达式3的值
${12!=12?"李佳祥":"李大磊"}
“.”点运算和[]中括号运算符
点运算,可以输出Bean对象中某个属性的值.
[]中括号运算,可以输出有序集合中某个元素的值
并且[]中括号运算,还可以map集合中里含有特殊字符的key的值
<%Map<String,Object> map=new HashMap<>();map.put("a.a.a","aaavalue");map.put("b+b+b","bbbvalue");map.put("c-c-c","ccvalue");request.setAttribute("map",map);
%>
${map['a.a.a']}<br><!--出现特殊字符“.”,必须使用[]
${map['b+b+b']}
EL表达式的11个隐含对象
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>上下文参数 |
EL获取四个域对象中的属性
pageScope ------ pageContext域
requestScope -------- request域
sessionScope ----------- session域
applicationScope ----------- ServletContext域
语法:变量名. 属性名
例如
<%request.setAttribute("key","values");
%>
${requestScope.key}
pageContext对象的使用
1、协议
2、服务器ip
3、服务器端口
4、获取工程路径
5、获取请求方法
6、获取客户端ip地址
7、获取会话的id编号
<%--request.getScheme() 它可以获取请求的协议request.getServerName() 获取请求的服务器ip或域名request.getServerPort() 获取请求的服务器端口号getContextPath() 获取当前工程路径request.getMethod() 获取请求的方式(GET或POST)request.getRemoteHost() 获取客户端的ip 地址session.getId() 获取会话的唯一标识--%>
<%=request.getScheme() %> <br>
1.协议: ${ 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>
其他EL隐含对象使用
输出请求参数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['User-Agent'][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>