欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

EL表达式

时间:2023-07-06
文章目录

1.什么是EL表达式2.EL表达式搜索域数据的顺序3.EL表达式输出Bean的普通属性,数组属性,List集合属性,map集合属性4.EL表达式--运算5.EL表达式的11个隐含对象 1.什么是EL表达式

EL表达式的全称:expression Language。表达式语言。
EL表达式的作用:主要是代替jsp页面中的表达式脚本,在jsp页面中进行数据的输出。因为EL表达式在输出数据时要比jsp的脚本要简洁。
EL表达式输出的格式是:${表达式}
EL表达式输出null值的时候,输出的是空串,jsp表达式脚本输出null值的时候,输出的是null字符串。
我们创建一个工程,在webapp目录下创建一个a.jsp,代码如下:

<%@ 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}

运行结果如下:

2.EL表达式搜索域数据的顺序

EL表达式主要是在jsp页面中输出数据。主要是输出域对象中的数据。
当四个域中都要相同的key值时,EL表达式会按照四个域从小到大的顺序去进行搜索,找到就输出。
我们在webapp目录下编写一个b.jsp,代码如下:

<%@ 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}

运行结果:

我们任意的调换数据,结果还是pageContext。
接着我们注释掉pageContext,运行结果如下:

我们再把request注释掉,结果如下:

接着注释掉session,结果如下:

这是因为session在打开浏览器时被创建,我们关闭浏览器在搜索b.jsp,结果为application

3.EL表达式输出Bean的普通属性,数组属性,List集合属性,map集合属性

我们先创建一个软件包,假设命名为com.bjpowernode,在包下创建一个Person类,代码如下:

package com.bjpowernode;import java.util.Arrays;import java.util.List;import java.util.Map;public class Person { private String name; private String[]phones; private Listcities; private Mapmap; public Person(){ } public Person(String name,String[]phones,Listcities,Mapmap){ this.name=name; this.phones=phones; this.cities=cities; this.map=map; } public void setName(String name){ this.name=name; } public String getName(){ return this.name; } public void setPhones(String[]phones){ this.phones=phones; } public String[] getPhones(){ return this.phones; } public void setCities(Listcities){ this.cities=cities; } public List getCities(){ return this.cities; } public void setMap(Mapmap){ this.map=map; } public Map getMap(){ return this.map; } @Override public String toString(){ return "Person{"+ "name="+name+ ",phone="+ Arrays.toString(phones)+ ",cities="+cities+ ",map="+map+ "}"; }}

然后在webapp目录下创建一个c.jsp,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ page import="com.bjpowernode.Person" %><%@ page import="java.util.List" %><%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %><%@ page import="java.util.ArrayList" %> Title <% Person person=new Person(); person.setName("HelloWorld"); person.setPhones(new String[]{"18610541354","186888666","186999888"}); Listcities=new ArrayList(); cities.add("北京"); cities.add("上海"); cities.add("深圳"); person.setCities(cities); Mapmap=new HashMap<>(); map.put("key1","value1"); map.put("key2","value2"); map.put("key3","value3"); person.setMap(map); pageContext.setAttribute("person",person); %> 输出Person:${person}
输出Person的name属性:${person.name}
输出Person的phones数组地址:${person.phones}
输出Person的phones数组属性:${person.phones[0]}
输出Person的cities集合中的元素值:${person.cities}
输出Person的cities集合中的个别元素值:${person.cities[0]}
输出Person的map集合:{$person.map}
输出Person的map集合中某个key的值:{$person.map.key1}

运行结果如下:

假设我们给Person类添加一个age属性,

private int age=18;

然后在c.jsp访问该属性

删除Person的age属性:{$person.age}

结果会报错。
我们在Person.java中添加getAge()方法,在重新运行,结果如下:

也就是说,在找数据时,不会直接找那个属性,而是寻找该属性对应的get方法。

4.EL表达式–运算

1)关系运算

我们在webapp目录下创建一个d.jsp,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> Title ${12==12}或${12 eq 12}
${12 != 12}或${12 ne 12}
${12 > 12}或${12 gt 12}
${12 < 12}或${12 lt 12}
${12 <= 12}或${12 le 12}
${12 >=12}或${12 ge 12}

结果如下:

2)逻辑运算

我们修改d.jsp,代码如下:

${12==12 && 12>11 }或 ${12==12 and 12>11}
${12==12 || 12>11 }或 ${12==12 or 12>11}
${!true} 或 ${not true}

结果如下:

3)算术运算

修改d.jsp代码:

${12 +12}
${12-12}
${12*12}
${12/12}或${12 div 12}
${18%12}或${18 mod 12}

结果如下:

4)empty运算
可以判断一个数据是否为空,如果为空,则输出true,反之输出false
以下几种情况为空:
(1)值为null的时候,为空
(2)值为空串的时候,为空
(3)值是Object类型数组,长度为0的时候
(4)list集合,元素个数为0
(5)map集合,元素个数为0
我们创建一个e.jsp,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ page import="java.util.List" %><%@ page import="java.util.ArrayList" %><%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %> Title <% request.setAttribute("emptyNull", null); request.setAttribute("emptyStr",""); request.setAttribute("emptyArr",new Object[]{}); Listlist=new ArrayList<>(); list.add("abc"); request.setAttribute("emptyList",list); Mapmap=new HashMap(); map.put("key1","value1"); request.setAttribute("emptyMap",map); %> ${empty emptyNull}
${empty emptyStr}
${empty emptyArr}
${empty emptyList}
${empty emptyMap}

结果如下:

5)三元运算
表达式1?表达式2:表达式3
我们修改e.jsp,代码如下:

${12==12?"Hello":"World"};
${12!=12?"Hello":"World"};

结果如下:

6)"."点运算和[]中括号运算符
点运算可以输出Bean对象中某个属性的值。
[]中括号运算,可以输出有序集合中某个元素的值。并且[]中括号运算,还可以输出map集合中key里含有特殊字符的key的值
我们创建一个f.jsp,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ page import="java.util.Map" %><%@ page import="java.util.HashMap" %> Title <% Mapmap=new HashMap(); map.put("aaa","aaaValue"); map.put("b+b+b","bbbValue"); map.put("c-c-c","cccValue"); request.setAttribute("map",map); %> ${map}
${map.aaa}
${map.b+b+b}
${map['b+b+b']}
${map["c-c-c"]}

结果如下:

当key有特殊字符时,要获得value值时可以用[]将key包起来,同时key要加单引号或者双号

5.EL表达式的11个隐含对象

EL表达式中11个隐含对象是EL表达式中自己定义的,可以直接使用

变量类型作用pageContextPageContextImpl获取jsp中的九大内置对象pageScopeMap获取pageContext域中的数据requestScopeMap获取request域中的数据sessionScopeMap 获取Session域中的数据applicationScopeMap获取ServletContext域中的数据paramMap获取请求的参数值paramValuesMap获取请求参数的值,获取多个值的时候使用headerMap获取请求头的信息headerValuesMap获取请求头的信息,可以获取多个值的情况cookieMap获取当前请求的cookie信息initParamMap获取在web.xml中配置的上下文参数

1)EL获取四个特定域中的属性
pageScope ==== pageContext域
requestScope ==== Request域
sessionScope ==== Session域
applicationScope ==== ServletContext域
我们创建一个scope.jsp,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> Title <% pageContext.setAttribute("key1","pageContext1"); pageContext.setAttribute("key2","pageContext2"); request.setAttribute("key2","request"); session.setAttribute("key2","session"); application.setAttribute("key2","application"); %> ${pageScope.key2}
${requestScope.key2}
${sessionScope.key2}
${applicationScope.key2}

结果如下:

2)pageContext对象的使用
1.协议
2.服务器IP
3.服务器端口
4.获取工程路径
5.获取请求方法
6.获取客户端IP地址
7.获取会话的id编号
我们创建一个pageContext.jsp,代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> Title <%-- request.getScheme()它可以获取请求的协议 request.getServerName()获取请求的服务器IP或域名 request.getServerPort()获取请求的服务器端口号 request.getContextPath()获取当前路径 request.getMethod()获取请求的方式(GET or POST) request.getRemoteHost()获取客户端的ip地址 session.getId()获取会话的唯一标识 --%> ${pageContext}
<%=request.getScheme()%>
<%=request.getServerName()%>
<%=request.getServerPort()%>
<%=request.getContextPath()%>
<%=request.getMethod()%>
<%=request.getRemoteHost()%>
<%=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}

结果如下:

3)EL表达式其他隐含对象的使用(了解一下即可)
创建一个other_el_obj.jsp
代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> Titile ${param}

结果如下:

没有参数,那么我们在浏览栏后面添加参数
http://ip:port/other_el_obj.jsp?username=cxy&password=666,结果如下:

修改other_el_obj.jsp如下:

输出请求参数username的值:${param.username}
输出请求参数password的值:${param.password}

结果如下:

我们修改other_el_obj.jsp如下:

输出请求参数username的值:${param.username}
输出请求参数password的值:${param.password}
输出请求参数hobby的值:${paramValues.hobby[0]}
输出请求参数hobby的值:${paramValues.hobby[1]}

在地址栏输入:
http://ip:port/other_el_obj.jsp?username=cxy&password=666&hobby=cpp&hobby=java
结果如下:

修改web.xml,添加代码如下:

url jdbc:mysql1///test

修改other_el_obj.jsp代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> Titile 输出请求参数username的值:${param.username}
输出请求参数password的值:${param.password}
输出请求参数hobby的值:${paramValues.hobby[0]}
输出请求参数hobby的值:${paramValues.hobby[1]}
输出请求头[User-Agent]的值:${header['User-Agent']}
输出请求头[Connection]的值:${header.Connection}
输出请求头[User-Agent]的值:${headerValues['User-Agent'][0]}
${cookie}
获取cookie的名称:${cookie.JSESSIONID.name}
获取cookie的值:${cookie.JSESSIONID.value}
${initParam}
输出<Context-param">>url的值:&{initParam.url}

在浏览栏上输入:http://ip:port/other_el_obj.jsp?username=cxy&password=666&hobby=cpp&hobby=java
结果如下:

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。