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" %>
EL表达式输出key的值是:${key}
表达式脚本输出key的值是:<%=request.getAttribute("key1")%>
EL表达式输出key的值是:${key1}
运行结果如下:
EL表达式主要是在jsp页面中输出数据。主要是输出域对象中的数据。
当四个域中都要相同的key值时,EL表达式会按照四个域从小到大的顺序去进行搜索,找到就输出。
我们在webapp目录下编写一个b.jsp,代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
运行结果:
我们任意的调换数据,结果还是pageContext。
接着我们注释掉pageContext,运行结果如下:
我们再把request注释掉,结果如下:
接着注释掉session,结果如下:
这是因为session在打开浏览器时被创建,我们关闭浏览器在搜索b.jsp,结果为application
我们先创建一个软件包,假设命名为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 List
然后在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" %>
输出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方法。
1)关系运算
我们在webapp目录下创建一个d.jsp,代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
${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" %>
${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" %>
${map.aaa}
${map.b+b+b}
${map['b+b+b']}
${map["c-c-c"]}
结果如下:
当key有特殊字符时,要获得value值时可以用[]将key包起来,同时key要加单引号或者双号
EL表达式中11个隐含对象是EL表达式中自己定义的,可以直接使用
变量类型作用pageContextPageContextImpl获取jsp中的九大内置对象pageScopeMap
1)EL获取四个特定域中的属性
pageScope ==== pageContext域
requestScope ==== Request域
sessionScope ==== Session域
applicationScope ==== ServletContext域
我们创建一个scope.jsp,代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
${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" %>
<%=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" %>
结果如下:
没有参数,那么我们在浏览栏后面添加参数
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,添加代码如下:
修改other_el_obj.jsp代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
输出请求参数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
结果如下: