EL表达式&JSTL标签库
1、EL表达式
什么是EL表达式,EL表达式的作用?
EL表达式的全称是:Expression Language。是表达式语言
EL表达式的作用:EL表达式主要是代替jsp页面中的表达式在jsp页面中进行数据的输出。
因为EL表达式在输出时,比jsp的表达式脚本要简洁很多
EL表达式的格式是:${表达式}
EL表达式输出null值的时候,输出的是空串。jsp表达式脚本输出null值的时候,输出的是null字符串
EL表达式搜索域数据的顺序
EL表达式主要是在jsp页面中输出数据
主要是输出域对象中的数据。
当四个域中都有相同的key数据的时候,EL表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出
EL表达式输出Bean的普通属性,数组属性。List集合属性,map集合属性
- 需求:–输出Preson类中普通属性,数组属性。List集合属性和map集合属性
EL表达式——运算
语法:${运算表达式},EL支持如下运算符
关系运算符 | 说明 | 范例 | 结果 |
---|---|---|---|
==或eq | 等于 | 5 = = 5 或 {5==5}或 5==5或{5 eq 5} | true |
!= 或ne | 不等于 | 5 ! = 5 或 {5!=5}或 5!=5或{5 ne 5} | false |
<或lt | 小于 | ${3 < 5} 或 ${3 lt 5} | true |
>或gt | 大于 | 2 > 10 或 {2 > 10}或 2>10或{2 gt 10} | false |
<=或 le | 小于等于 | 5 < = 12 或 {5 <= 12} 或 5<=12或{5 le 12} | true |
>=或ge | 大于等于 | 3 > = 5 或 {3 >=5}或 3>=5或{3 le 5} | false |
逻辑运算符 | 说明 | 范例 | 结果 |
---|---|---|---|
&& 或 and | 与运算 | KaTeX parse error: Expected '}', got '&' at position 11: { 12 ==12 &̲& 12<11}或{12 == 12 and 12<11 } | false |
||或or | 或运算 | $12 ==12|12<11}或 ${12 == 12 or 12 <11 } | true |
!或not | 取反运算 | KaTeX parse error: Expected 'EOF', got '}' at position 6: !true}̲或{not true } | false |
算术运算符 | 说明 | 范例 | 结果 |
---|---|---|---|
+ | 加法 | ${12 + 18} | 30 |
- | 减法 | ${30 - 12} | 18 |
* | 乘法 | ${12 * 12} | 144 |
/或div | 除法 | 144 / 12 或 {144 / 12}或 144/12或{144 div 12} | 12 |
%或mod | 取模 | KaTeX parse error: Expected '}', got 'EOF' at end of input: {144 % 10}或{144 mod 10} | 4 |
**empty运算:**可以判断一个数据是否为空,如果为空,则输出true,不为空输出false
以下几种情况为空:
- 值为null值的时候,为空
- 值为空串的时候,为空
- 值是Object类型数组,长度为零的时候
- list集合,元素个数为零
- map集合,元素个数为零
三元运算: 表达式1?表达式2:表达式3
如果表达式1是真的,返回表达式2的值,如果表达式2 的值,返回表达式3 的值
.点运算和[]中括号运算:
.点运算,可以输出Bean对象中某个属性的值
[]中括号运算,可以输出有序集合中某个元素的值
并且[]中括号运算,还可以输出map集合中key里含有特殊字符的key的值
5、EL表达式的11个隐含对象
EL表达式中11个隐含对象,是EL表达式中自己定义的,可以直接使用
变量 | 类型 | 作用 |
---|---|---|
pageContext | PageContextImpl | 它可以获取jsp中的九大内置对象 |
pageScope | Map<String,Object> | 它可以获取pageContext域中的数据 |
requestScope | Map<String,Object> | 它可以获取Request域中的数据 |
sessionScope | Map<String,Object> | 它可以获取Session域中的数据 |
application | 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中配置的上下文参数 |
-
EL获取四个特定域中的属性
pageScope ========== pageContext域
requestScope ========== Request域
sessionScope ========== Session域
application ========== ServletContext域
-
pageContext对象的使用:
request.getScheme
session.getId()获取会话的唯一标识
- 协议:${pageContext.request.scheme}
- 服务器ip:${pageContext.request.serverName}
- 服务器端口号:${pageContext.request.servlerPort}
- 获取工作路径:${pageContext.request.contextPath}
- 获取请求方法:${pageContext.request.method}
- 获取客户端ip地址:${pageContext.request.remoteHost}
- 获取会话的id编号:${pageContext.session.id}
2、JSTL标签库:
JSTL标签库有 全称是指 JSP Standard Tag Library JSP标准标签库。是一个不断完善的开放源代码的JSP标签库
EL表达式主要是为了替换jsp中的表达式脚本,而标签库则是为了替换代码脚本。这样使得整个jsp页面变得个更加简洁。
JSTL由五个不同功能的标签库组成
功能范围 | URL | 前缀 |
---|---|---|
核心标签库–重点 | http://java.sun.com/jsp/jstl/core | c |
格式化 | http://java.sun.com/jsp/jst/fmt | fmt |
函数 | http://java.sun.com/jsp/jstl/functions | fn |
数据库(不使用) | http://java.sun.com/jsp/jstl/sql | sql |
xml(不使用) | http://java.sun.com/jsp/jstl/xml | x |
在jsp标签库中使用taglib指令引入标签库
JSTL标签库的使用步骤:
1、先导入JSTL标签库的jar包
2、第二步,使用taglib指令引入标签库
core核心库使用
- < c:set/ > 作用:set标签可以往域中保存数据
<%-- <c:set/> 作用:set标签可以往域中保存数据 域对象.setAttribute(key,value) scope属性设置保存到哪个域 page表示pageContext域(默认值) request表示Request域 session表示Session域 application表示ServletContext域 key是多少 var属性设置key是多少 value设置value是多少 value是多少 --%>
- < c:if /> if标签用来做if判断
<%--<c:if test=""></c:if>--%> <c:if test="${12 == 13}"> <h1>12等于12</h1> </c:if> <c:if test="${12 != 13}"> <h1>12不等于13</h1> </c:if>
-
< c:chose><c:when ><c:otherwise >标签
作用:多路判断。跟switch…case非常接近
choose标签开始选择判断 when标签标识每一种判断情况 test表示当前判断情况的值 otherwise表示剩下的情况 注意:标签里不能使用html注释
-
<c:forEach />
作用:遍历输出使用
begin属性设置开始的索引
end属性设置结束的索引
step表示遍历的步长
varStatus表示当前遍历到的数据的状态
var 属性表示遍历的循环遍历(也是当前正在遍历的数值)
<c:forEach begin="1" end="10" var="i"> ${i} </c:forEach> 输出结果就是1 2 3 4 5 6 7 8 9 10 遍历Object数组 <c:forEach items="${requestScope.arr}" var="item"> ${item}<br> </c:forEach>