JSTL
前面我们自定义的标签库,JSTL已经由 Apache 定义好了,并且也已经打包。我们只需要导入该 Jar 包后,在页面中使用 taglib 指令将其导入即可使用。这套标签库称为 JSTL,JSP Standard Tag Library,即 JSP 标准标签库。JSTL 中定义了五个标签库:
核心标签库:主要用于完成基本的逻辑运算。重点。
格式化标签库:主要用于完成日期、数字的格式化显示。
EL 函数标签库:定义了若干 EL 函数。
SQL 操作标签库:完成 SQL 操作。不使用了。对于 SQL 操作,已经完全由 Java 代码完成。
XML 操作标签库:完成 XML 操作。不使用了。对于 XML 操作,已经完全由 Java 代码完成。
核心标签库
使用 JSTL 的核心标签库,需要在页面中通过 taglib 指令首先将标签库导入。
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
(1) c:set
用于进行变量定义,并将变量存放到指定域属性空间;为 Bean 的属性赋值;设置 Map的 key 与 value 等。该标签在实际开发中并不常用。
value:变量的值
var:变量名
scope:将变量存放的域属性空间,取值为 page、request、session、application。默认为 page 范围
target:指定的 Bean 对象
property:指定对象的指定属性
value:为指定对象的指定属性所赋的值
target:指定的 map
property:指定 map 的指定的 key
value:为指定 map 的指定的 key 所赋的值
(2) c:remove
从域属性空间中删除指定变量。该标签不常用。
(3) c:out
(4) c:catch
(5) c:if
(6) c:choose
(7) c:forEach
用于循环遍历数组、List、Set、Map 集合。在实际应用中使用非常频繁。
常规用法:
遍历Object[]
<%
Object[] objects = {"d","f","e",9};
pageContext.setAttribute("object", objects);
%>
<%--遍历OBJEC--%>
<c:forEach items="${pageScope.object}" var="var">
${var}
</c:forEach>
遍历List
<%
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("加油!");
arrayList.add("加油!");
arrayList.add("加油!");
arrayList.add("come on!");
arrayList.add("come on!");
arrayList.add("come on!");
session.setAttribute("list",arrayList);
<c:forEach items="${sessionScope.list}" var="name">
${name}<br>
</c:forEach>
%>
遍历Set
<%
HashSet<String> setlist = new HashSet<>();
setlist.add("加油!");
setlist.add("加油!");
setlist.add("加油!");
setlist.add("come on!");
setlist.add("come on!");
setlist.add("come on!");
session.setAttribute("set",arrayList);
<c:forEach items="${sessionScope.set}" var="name">
${name}<br>
</c:forEach>
%>
遍历Map
<%
HashMap<String, String> map = new HashMap<>();
map.put("jus", "kskdj");
map.put("fg", "f");
map.put("fd", "hg");
session.setAttribute("map", map);
%>
遍历Map
<c:forEach items="${sessionScope.map}" var="map">
${map.key} = ${map.value}
</c:forEach>
指定遍历的起始索引及步长
对于数组及 List,可以指定遍历的起始索引及步长。
begin:指定遍历开始索引。从 0 开始计数。
end:指定遍历结束索引,遍历结果包含这个索引
step:指定遍历时的步长
获取当前遍历对象的相关信息
标签中有一个属性 varStatus,该属性指定的变量是一个引用型变量。该引用中记录了当前遍历对象的相关信息。该引用常用的方法如下:
int getIndex():获取当前对象的索引。从 0 开始计数。
int getCount():获取当前对象的序号。从 1 开始计数。
boolean isFirst():判断当前对象是否是第一个对象。
boolean isLast():判断当前对象是否是最后一个对象。
添加序号
格式化标签库
使用 JSTL 的核心标签库,需要在页面中通过 taglib 指令首先将标签库导入。
(1) fmt:formatDate
该标签用于使用不同的模式格式化日期。其常用属性有:
value:将要被格式化的数据
pattern:格式化的模式。其与 SimpleDateFormat 的参数设置方式相同。
var:格式化后的字符串所要存放的变量。若不指定 var,则会将格式化过的结果直接显示在页面
scope:变量存放的域属性空间,取值为 page、request、session、application。默认为page 范围 type:其取值为 date、time,或 both,表示给出的 value 是日期、时间,还是两者都包含。默认为 date
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<html>
<head>
</head>
<body>
<title>格式化标签库</title>
<%
Date date = new Date();
request.setAttribute("nowTime", date);
%>
<form action="">
<%-- 直接显示在页面--%>
<fmt:formatDate value="${nowTime}" pattern="yyyy-MM-dd"></fmt:formatDate>
<%-- 格式化后的结果显示在页面--%>
<fmt:formatDate value="${pageScope.now}" var="nowTime" pattern="yyyy-MM-dd"></fmt:formatDate>
<input type="text" name="nowTimeName" value="${nowTime}" />
</form>
</body>
</html>
(2) fmt:parseDate
该标签用于将指定字符串转换为日期类型。常用的属性有:
value:将要被转换的数据
pattern:将要被转换的数据的模式。其与 SimpleDateFormat 的参数设置方式相同。
var:转换后的日期类型数据所要存放的变量。若不指定 var,则会将转换过的结果直接显示在页面 scope:变量存放的域属性空间,取值为 page、request、session、application。默认为page 范围
(3) fmt:formatNumber
该标签用于按照指定格式对数字进行格式化。常用的属性有:
若要使用 pattern 模式,则其中常用的符号的意义为:
(4) fmt:parseNumber该标签用于将指定字符串转换为数值类型。常用的属性有: