四、 JSTL
1. JSTL 简介
* 什么是 JSTL?
1. JSTL(JavaServer Pages Standard Tag Library,即:JSP 标准标签库),是由 SUN 公司发布的一个针对 JSP 开发的新组件,并作为 JSP 技术应用的一个标准
2. JSTL 标签库的作用是尽量减少 JSP 文件的 Java 代码,使 Java 代码与 HTML 代码分离,所以 JSTL 标识库符合 MVC 设计理念
3. MVC 设计理念是实现动作控制、数据处理、结果显示三者分离
4. JSTL 几乎能够做到传统 JSP 脚本代码能做的任何事情
5. JSTL 标签库包含了以下五个标签库:
1)JSTL 核心标签库(重点讲解):是最常用的 JSTL 标签
2)I18N 格式标签库:用来格式化并输出文本、日期、时间、数字
3)XML 标签库:提供了与关系型数据库(Oracle,MySQL,SQL Server 等等)进行交互的标签
4)SQL 标签库:提供了创建和操作 XML 文档的标签
5)函数标签库:包含一系列标准函数,大部分是字符串处理函数
* 在 JSP 中使用 JSTL 标签需要具备如下两个条件:
1. 下载安装 JSTL 库(两种):
1)JSTL1.1 版本的下载地址为:https://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
a.下载文件为 jakarta-taglibs-standard-1.1.1.zip,解压后将 lib 文件夹下的两个文件:jstl.jar、standard.jar 拷贝到 Web 应用程序的 /WEB-INF/lib/ 下
2)JSTL1.2 版本的下载地址为:https://mvnrepository.com/artifact/org.glassfish.web/jstl-impl/1.2
a.下载文件为 jstl-impl-1.2.jar,将该文件拷贝到 Web 应用程序的 /WEB-INF/lib/ 下
2. 要在 JSP 页面使用 taglib 指令引用 JSTL 标签库(根据自己的需求引用):
1)JSTL 核心标签库:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2)I18N 格式标签库:<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
3)XML 标签库:<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
4)SQL 标签库:<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
5)函数标签库:<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
2. JSTL 核心标签
* JSTL 核心标签
* 1. <c:out value="数据" default="默认值" escapeXml="true"></c:out>
a.将数据输出给客户端,如同 <%= ... >
b.数据可以是常量值,也可以是 EL 表达式,使用的表达式结果为 null,则输出默认值
c.escapeXml:是否忽略 XML 特殊字符,默认为 true
* 2. <c:set var="hello" value="hello pageContext" scope="page"></c:set>
a.存储数据到作用域对象中
b.var:表示存储的键名
c.value:表示存储的数据
d.scope:表示要存储在哪个作用域中,值有 page/request/session/application,默认是 page
* 3. <c:set target="package.class" property="propertyName" value="value" scope=""></c:set>
a.用于设置对象属性,此时就是 <jsp:setProperty> 行为标签的孪生兄弟了
b.一旦指定了 target 属性,就一定要指定 property 属性
* 4. <c:remove var="hello" scope="request"/>
a.删除作用域中的指定键名的数据
b.var:表示要删除数据的键名
c.scope:表示要删除数据所在的作用域(可选)
d.注意:如果在不指定作用域的情况使用该标签删除数据,会将四个作用对象中的符合要求的数据全部删除
* 5. <c:if test="${表达式}"> 代码 </c:if>
a.进行逻辑判断,相当于 Java 中的单分支判断
b.注意:逻辑判断标签需要依赖于 EL 的逻辑运算,也就是表达式中涉及的数据必须从作用域中获取
* 6. <c:choose>
<c:when test="${表达式}"> 执行体 </c:when>
<c:when test="${表达式}"> 执行体 </c:when>
....
<c:otherwise> 执行体 </c:otherwise>
</c:choose>
a.用于进行多条件的逻辑判断,类似 Java 中的多分支语句
b.条件成立只会执行一次,都不成立则执行 otherwise
* 7. <c:forEach var="i" begin="1" end="6" step="1" varStatus="vs">
<c:out value="${i}"/>
</c:forEach>
a.常量循环
b.var:声明变量,记录每次循环的结果。存储在作用域中,需要使用 EL 表达式获取
c.begin:声明循环开始位置
d.end:声明循环结束位置
e.step:设置步长
f.varStatus:声明标量,记录每次循环的数据(循环下标、循环次数、是否是第一次循环、是否是最后一次循环)。注意:这些数据存储在作用域中,需要使用 EL 表达式获取,如:
${vs.index}、${vs.count}、${vs.first}、${vs.last}
* 8. <c:forEach items="${list}" var="va">
<c:out value="${va}"/><p>
</c:forEach>
a.对象遍历
b.items:声明要遍历的对象,结合 EL 表达式获取对象
c.var:声明变量,记录每次循环的结果。存储在作用域中,需要使用 EL 表达式获取
* 9. <c:forTokens items="good,better,best" delims="," var="name">
<c:out value="${name}"/><p>
</c:forTokens>
a.根据指定的分隔符来分隔内容并迭代输出
b.delims:表分隔符
c.var:声明变量,记录每次迭代输出的结果。存储在作用域中,需要使用 EL 表达式获取
* 9. <c:catch var="String exceptionName">
<% int x = 5/0; %>
</c:catch>
a.var:用来储存错误信息的变量,需要结合 EL 表达式来获取,如:${exceptioName}、${exceptioName.message}
* 10. <c:import url="" />
a.如同 <jsp:include> 行为标签,但可以是绝对路径
* 11. <c:redirect url="" />
a. 重定向至一个新的 URL