title: 【学习之路】EL表达式学习
draft: true
tags:
- 学习之路
- JavaEE
- EL表达式
categories: - JavaEE
- EL表达式
description: EL表达式学习,如何在JSP中使用EL表达式
cover: ‘https://cdn.jsdelivr.net/gh/CodeZixuan/Blog_Images/EL/image.jpg‘
abbrlink: 44432
date: 2020-10-25 14:44:22
EL表达式的作用
- EL表达式的全称是:Expession Language 是表达式语言
- EL表达式主要是代替JSP页面中的表达式脚本在JSP页面中进行数据的传输,因为EL表达式在输出时比JSP简介很多
EL表达式的格式:${表达式}
EL表达式在输出null值的时候,输出的是空串。JSP表达式输出的是null字符串
EL表达式搜索与数据的顺序
EL表达式主要是在JSP页面中输出数据,主要是输出域对象的数据。当四个域中都有相同的key的数据的时候,EL表达式会按照从小到大的顺序去进行搜索,找到就输出
<body>
<%
request.setAttribut("key", "request");
session.setAttribute("key", "session");
application.setAttribute("key", "application");
pageContext.setAttribute("key", "pageContext");
%>
${ key }
</body>
EL表达式运算符
关系运算符
关系运算符 | 说明 |
---|---|
== 或 eq | 等于 |
!= 或 ne | 不等于 |
< 或 lt | 小于 |
> 或 gt | 大于 |
<= 或 le | 小于等于 |
>= 或 ge | 大于等于 |
逻辑运算
逻辑运算符 | 说明 |
---|---|
&&或and | 与运算 |
||或or | 或运算 |
!或not | 取反 |
empty运算
empty 运算可以判断一个数据是否为空,如果为空,则输出 true,不为空输出 false。
以下几种情况为空:
- 值为 null 值的时候,为空
- 值为空串的时候,为空
- 值是 Object 类型数组,长度为零的时候
- list 集合,元素个数为零
- map 集合,元素个数为零
点运算和中括号运算符
点运算,可以输出 Bean 对象中某个属性的值。中括号运算,可以输出有序集合中某个元素的值。并且中括号运算,还可以输出 map 集合中 key 里含有特殊字符的 key 的值。
<body>
<%
Map<String,Object> map = new HashMap<String, Object>();
map.put("a.a.a", "aaaValue");
map.put("b+b+b", "bbbValue");
map.put("c-c-c", "cccValue");
request.setAttribute("map", map);
%>
${ map['a.a.a'] }
${ map["b+b+b"] }
${ map['c-c-c'] }
</body>
EL表达式的11个隐含对象
- EL表达式中的11个隐含对象,是EL表达式中自己定义的,可以直接使用
| 变量 | 类型 | 作用 |
| —- | —- | —- |
| pageContext | PageContextImpl | 可以获取JSP中的九大内置对象 |
| pageScope | Map
| 可以获取pageContext域中的数据 | | requestScope | Map | 可以获取Request域中的数据 | | sessionScope | Map | 可以获取Session域中的数据 | | applicationScope | Map | 可以获取ServletContext域中的数据 | | param | Map | 可以获取请求参数的值 | | paramValues | Map | 可以获取请求参数值(多个值的时候使用) | | header | Map | 可以获取请求头的信息 | | headerValues | Map | 可以获取请求头信息(可以取多个值) | | cookie | Map | 可以获取当前请求的Cooke信息 |
还有内容没写
JSTL标签库的使用
先导入JSTL标签库的包
使用taglib指令引入标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp//jstl/core" %>
core核心库使用
<c:set/>
set标签可以往域中保存数据
<%--
域对象 .setAttribute(key,value);
scope 属性设置保存到哪个域
page 表示 PageContext 域(默认值)
request 表示 Request 域
session 表示 Session 域
application 表示 ServletContext 域
var 属性设置 key 是多少
value 属性设置值
--%>
${ sessionScope.abc } <br>
<c:set scope="session" var="abc" value="abcValue"/>
${ sessionScope.abc }
<c:if />
if标签用来做判断
<%--
<c:if></c:if> 没有eles结构
--%>
<c:if test="${ 1 > 2 }">
<h1>1 不大于 2</h1>
</c:if>
. <c:choose> <c:when> <c:otherwise>
多路判断和switch…case…default接近
<%--
<c:choose> <c:when> <c:otherwise> 标签:
标签里不能使用 html 注释,要使用 jsp 注释
when 标签的父标签一定要是 choose 标签
--%>
<%
request.setAttribute("size", 100);
%>
<c:choose>
<%-- 这是 html 注释 --%>
<c:when test="${ requestScope.height > 190 }">
<h2>大于190</h2>
</c:when>
<c:when test="${ requestScope.height > 180 }">
<h2>大于180</h2>
</c:when>
<c:when test="${ requestScope.height > 170 }">
<h2>大于170</h2>
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${requestScope.height > 160}">
<h3>大于 160</h3>
</c:when>
<c:when test="${requestScope.height > 150}">
<h3>大于 150</h3>
</c:when>
<c:when test="${requestScope.height > 140}">
<h3>大于 140</h3>
</c:when>
<c:otherwise>
其他小于 140
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
<c:forEach />
遍历输出
<c:forEach begin="1" end="10" var="i">
第${i}行
</c:forEach>