1.EL表达式: EL表达式主要用于获取后端传递到页面的数据 和 运算
语法: ${表达式}
获取值: EL表达式可以从四大域对象中获取数据(page域==>request域==>session域==>appliction域)
$(域名称.键名):
域名城 | 对应域 |
pageScope | pageContext |
requestScope | request |
sessionScope | session |
applicationScope | ServletContext |
<!-- 如在servlet中通过request存入了name=admin,在jsp中通过EL表达式来获取 -->
${requestScope.name}
${键名}: 表示依次从最小的域中查找是否有该键对应的值,直到找到为止
获取对象、List集合、Map集合的值:
<!-- 对象:${域名称.键名.属性名} -->
<h4>对象获取</h4>
${group.name }
<!-- Map集合:${域名称.键名.key名称},${域名称.键名["key名称"]} -->
<h4>map获取</h4>
map.k1 : ${map.k1 }<br>
map.k2 : ${map.k2 }
<!-- 数组: -->
<h4>数组操作</h4>
strArr[0] : ${strArr[0] }
<!-- List集合:${域名称.键名[索引]} -->
<h4>集合操作</h4>
<!-- [index] 超过下标 ,获取不到数据, 而 get(index) 超出下标 会报错 -->
groups[1].name : ${groups[1].name }
groups.get(2).name : ${groups.get(2).name }
运算: 算数、比较、逻辑、空运算(empty)
<h3>测试empty</h3>
v1 : ${empty v1 }
<h3>运算符支持</h3>
<!-- 结果为: 1+1= 2 -->
1+1= ${1+1 }
<h3>逻辑运算符支持</h3>
${10>20 && 10<20 }
注: EL表达式获取一个不存在的数据时,返回的是一个空字符串""
<!--
通过 域对象名.getAttribute("key")获取一个不存在的数据时,返回为null
-->
<%
String username = (String)request.getAttribute("username");
out.print(username);
%>
<!-- 而EL表达式获取一个不存在的数据时,返回的是一个空字符串"" -->
${requestScope.username}
2.JSTL标签库:
导包:
引入包:
核心库: <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
c:out:
<!-- c:out向页面直接输出 -->
<c:out value="123"></c:out>
<!--
c:out 与 EL表达式 的区别:
1.两者找一个不存在的参数时,均为空,但是c:out可以通过default属性进行设置
2.使用EL表达式 会解析字符串中的HTML标签,而c:out需要通过escapeXml属性设置是否逃脱XML解析, 默认是true,
-->
<!-- 设置默认值:
1 使用default属性
2 在开始和结束标签内
-->
<c:out value="${asd }" default="数据不小心走丢了~" />
<c:out value="${asd }">123</c:out>
<!-- escapeXml : 设置是否逃脱XML解析, 默认是true, -->
c:set 和 c:remove: 设置变量值和对象属性
<!--
相当于 session.setAttribute("userId","root");
value: 要存储的值
scope: var属性的作用域
var: 存储信息的变量
-->
<c:set value="root" var="userId" scope="session" />
<!-- 删除 相当于 removeAttribute -->
<c:remove var="userId" />
c:if: gt==>大于 lt==>小于 eq==>等于
<!--
test: 条件判断
var: 用于存储条件结果的变量
scope: var属性的作用域,默认page
-->
<c:if test="${v1 lt v2 }">
v1 大于 v2
</c:if>
<!-- 判断为空 -->
<c:if test="${empty v1 }"></c:if>
c:choose: 分支语句
<!--
c:choose,c:when,c:otherwise:
相当于 switch语句或者 if else多分支语句
-->
<c:choose>
<!-- c:when: 相当于case -->
<c:when test="${v1 > v2 }">
v1 大于 v2
</c:when>
<c:when test="${v1 eq v2 }">
v1 等于 v2
</c:when>
<!-- c:otherwise: 相当于default -->
<c:otherwise>v1 小于 v2</c:otherwise>
</c:choose>
c:forEach: 循环遍历
<!--
items: 通过EL表达式获取集合
var: 将遍历的每个对象放到var参数中
begin: 第一个要遍历的元素的下标
end: 最后一个要遍历的元素的下标
varStatus:
index: 当前迭代的元素在集合中的索引,从0开始
count: 当前迭代的元素是集合中第几个元素,从1开始,即每个元素的下标
-->
<c:forEach items="${groups }" var="group">
${group.id }:${group.name }:${group.age }
</c:forEach>
<!-- map遍历 -->
<c:forEach items="${map }" var="entry">
${entry.key }:${entry.value }
</c:forEach>
c:forTokens: 通过指定分隔符将字符串分隔为一个数组然后进行遍历
<!-- 以#分割一个字符串,得到字符串数组,遍历这个数组,把每位元素复制给v -->
<c:forTokens items="${str }" delims="#" var="v">
${v }
</c:forTokens>
c:import: 检索一个绝对或相对 URL,然后将其内容暴露给页面
<!-- 页面包含 -->
<c:import url="http://www.baidu.com"></c:import>
c:redirect: 重定向至一个新的UR
<!--
url: 目标url
context: 紧接着一个本地网络应用程序的名称
-->
<c:redirect url="/JSTL/index.jsp" context="/"></c:redirect>
格式化: <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
fmt:formatDate: 使用指定的风格或模式格式化日期和时间
EL表达式获取时间 : ${today }
<!--
type="date": 默认,2021-8-25
type="time": 16:15:23
type="both": 2021-8-25 16:15:23
-->
<fmt:formatDate value="${today }" type="date"/>
<!--
dateStyle="short": 简写,21-8-25
dataStyle="medium": 默认,正常显示2021-8-25
dataStyle="long": 2021年8月25日
dataStyle="full": 2021年8月25日 星期三
timeStyle 与 dataStyle 相似
-->
<fmt:formatDate value="${today }" dateStyle="short"/>
<!--
pattern: 自定义格式
var: 存储格式化日期的变量名
如果不使用var,格式化语句在哪里,就把内容显示到哪里,如果加上var,这里就不再显示,需要单独调用
-->
<fmt:formatDate value="${today }" pattern="yyyy/MM-dd= HH时mm分ss秒SSS" var="currentDate"/>
${currenDate }
fmt:formatNumber: 使用指定的格式或精度格式化数字
<!--
pattern: 自定义的格式化模式
groupingUsed: 是否对数字分组(是否加入千分位) (TRUE 或 FALSE),默认为true
maxIntegerDigits: 整型数最大的位数 minIntegerDigits: 整型数最小的位数
maxFractionDigits: 小数点后最大的位数
var: 存储格式化数字的变量
type: number,currency(货币),precent(百分数)
-->
<!-- # 不会补位,0会补位 -->
<fmt:formatNumber value="${n }" pattern="###,###.####"/>
<fmt:formatNumber value="${n }" pattern="###,###.0000"/>
<!-- currencySymbol:指定货币符号 -->
<fmt:formatNumber value="${n }" type="currency" currencySymbol="$"/>
函数: <%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>