1 关于JSTL
1.1 JSTL中文叫jsp标准标签库,它是一个jsp标签集合,内部封装了jsp应用的通用核心功能。
1.2 JSTL支持通用的,结构化的任务,如迭代,条件判断,xml文档操作,国际化标签,SQL标签等
1.3 JSTL主要功能是简化jsp页面代码的编写
2 准备工作
1
下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下。
2
在JSP页面中引入<%@ taglib prefix=”页面使用的名称” uri=”功能范围的路径”%>
3 核心标签
1 引入核心标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2 核心标签库的分类
表达式操作 out、set、remove、catch
流程控制 if、choose、when、otherwise
迭代操作 forEach、forTokens
URL操作 import、param、url、redirect
Set标签
<c:set> 主要用来将变量存储至JSP范围中 或是JavaBean的属性或Map对象中
名称 | 说明 | 是否必须写 | 默认值 |
---|---|---|---|
Value | 要被存储的值 | 否 | 无 |
var | 存入的变量名称 | 否 | 无 |
scope | var变量的JSP范围 | 否 | Page |
target | JavaBean或Map对象 | 否 | 无 |
property | 指定target对象的属性 | 否 | 无 |
<%--存储值--%>
<c:set var="p1" value="data-c:set" scope="page"></c:set>
var p1 = ${p1}<br>
<c:out>主要用来显示数据的内容
名称 | 说明 | 是否必须写 | 默认值 |
---|---|---|---|
value | 需要显示出来的值 | 是 | 无 |
default | 如果value的值为null,则显示default的值 | 否 | 无 |
escapeXml | 是否转换特殊字符,如:<转换成 & lt; | 否 | True |
<%--输出内容--%>
<c:out value="abc"></c:out><br>
<c:remove> 主要负责移除变量
名称 | 说明 | 是否必须写 | 默认值 |
---|---|---|---|
Var | 欲移除的变量名称 | 是 | 无 |
Scope | var变量的jsp范围 | 否 | Page |
<c:if> 主要用于进行if判断,如果为true,则输出标签体中的内容
名称 | 说明 | 是否必须写 | 默认值 |
---|---|---|---|
Test | 表达式的结果为true,则执行体内容,false则相反 | 是 | 无 |
var | 如果 用来存储test运算的结果(true或false) | 否 | 无 |
scope | Var变量的JSP范围 | 否 | page |
<%--if条件判断--%>
<%
int age = 18;
pageContext.setAttribute("my_age", age);
%>
<c:out value="${my_age}"></c:out><br>
<c:if test="${my_age<18}">未成年</c:if>
<c:if test="${my_age>=18}">恭喜你,已经成年了</c:if>
<br>
<c:choose>,<c:when>,<c:otherwise> 作用相当于if-else
名称 | 说明 | 必须 | 默认 |
---|---|---|---|
test | 如果表达式的结果为true,则执行体内容,false则相反 | 是 | 无 |
<c:choose>
<c:when test="${number == 1}">
<p>您选择了数字1</p>
</c:when>
<c:when test="${number == 2}">
<p>您选择了数字2</p>
</c:when>
<c:when test="${number == 3}">
<p>您选择了数字3</p>
</c:when>
<c:otherwise>
<p>您选择了一个无效的数字</p>
</c:otherwise>
</c:choose>
<c:forEach> 循环控制,它可以将数组,集合(Collection)中的成员循序浏览一遍。
名称 | 说明 | 必须 | 默认值 |
---|---|---|---|
var | 用来存放现在指定的成员 | 是 | 无 |
items | 被迭代的集合对象 | 否 | 无 |
varStatus | 用来存放现在指的相关成员信息 | 否 | 无 |
begin | 开始的位置 | 否 | 0 |
end | 结束的位置 | 否 | 最后一个成员 |
step | 每次迭代的间隔数 | 否 | 1 |
<%--使用forEach循环输出集合的值--%>
<%
Set set = new HashSet<>();
set.add("data-1");
set.add("data-2");
set.add("data-3");
set.add("data-4");
pageContext.setAttribute("my_set", set);
%>
<c:forEach items = "${my_set}" var = "user_1">
${user_1}<br>
</c:forEach>
4 格式化标签
写在前面:使用格式化标签之前,需要先导包
// prefix前缀可以自定义
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
1、fmt:formatDate 作用:将日期类型格式化为指定模式的字符串
属性
value:将要被格式化的数据
pattern:格式化的模式,与SimpleDateFormat的参数设置一样
var:格式化后的字符串所要存放的变量,若不指定var,则会将格式化的结果直接显示在页面
scope:变量存放的域属性空间,默认page
type:其取值为date、time、both,表示给出的value是日期、时间、还是两者都包含,默认是date
2、fmt:parseDate 作用:用于将指定字符串转化为日期类型
<fmt:parseDate value=“${now }” pattern=“yyyy-MM-dd” var=“today”/>
Value服务器获取的时间
Pattern:转换的格式
Var:页面显示的变量
<%--格式化标签的使用--%>
<%
Date date = new Date();
pageContext.setAttribute("date", date);
%>
<%--直接输出--%>
${date}<br>
<%--格式化后输出--%>
<fmt:formatDate value="${date}" pattern="yyyy-mm-dd hh:mm:ss"></fmt:formatDate><br>
3、fmt:formatNumber 按照指定格式对数字进行格式化
属性
maxIntegerDigits:整数部分最多的位数
minIntegerDigits:整数部分最少的位数
maxFrctionDigits:小数部分最多的位数
minFrctionDigits:小数部分最少的位数
var:存储格式化结果的变量
scope:var属性的作用域
integerOnly:是否只解析整型数true或者浮点数false
示例代码:
示例1 基本的数字格式化
<fmt:formatNumber value="1234567.89" pattern="#,###.##" />
输出:1,234,567.89
示例2:数字格式化为货币格式
<fmt:formatNumber value="1234567.89" pattern="¤#,###.00" />
//¤是个特殊的货币符号
输出:$1,234,567.89
示例3:百分比格式化
<fmt:formatNumber value="0.9876" pattern="##%" />
输出:99%
示例4:格式化为指定小数位数
<fmt:formatNumber value="1234.5678" pattern="###0.00" />
示例5:负数的格式化
<fmt:formatNumber value="-1234.56" pattern="¤#,###.00;¤-#,###.00" />
输出:$-1,234.56