首先我们先来通过一段代码来看看标签库到底是干什么用的。
使用java脚本实现对集合的遍历
<%
List<Book> bookList = (List<Book>) session.getAttribute("bookList");
if(bookList!==null){
for(Book book : bookList){
out.println(book.getBookName());
}
}
%>
使用JSTL实现对集合的遍历
<c:forEach items="${seesionScope.bookList}" var ="book">
${book.bookName}
</c:forEach>c:forEach>
从上面的代码中我们明显能看出使用JSTL实现集合的遍历,代码量明显的减少,更加简洁,这就是JSTL的好处,下面我们就来详细的介绍一下JSTL的使用。
JSTL函数库分类
| 标签库 | 前置名称 | URL | 示例 |
|---|---|---|---|
| 核心标签库 | c | http://java.sun.com/jsp/jstl/core | <c:out> |
| I18N标签库 | fmt | http://java.sun.com/jsp/jstl/fmt | fmt:formatDate |
| SQL标签库 | sql | http://java.sun.com/jsp/jstl/sql | sql:query |
| XML标签库 | x | http://java.sun.com/jsp/jstl/xml | <x:forBach> |
| 函数标签库 | fn | http://java.sun.com/jsp/jstl/functions | fn:split |
(1)核心标签库
语法
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
核心表签库按功能又分为4类
- 通用标签,用于操作变量
- 条件标签,用于流程控制
- 迭代标签,用于循环遍历集合
- URL标签,用于针对URL相关的操作。
1.1 通用标签
①<c:out>标签
<c:out>标签用于输出数据,等同于<%= 表达式%>
语法
<c:out value="value" [ escapeXml="{true|false}"] [default="defailtValue"]/>
- value 表示要输出的数据,可以是jsp表达式,EL表达式或者静态值。
- escapeXml 表示是否将>,<,&等字符进行HTML字符实体转换后在进行输出,默认值是true。
- default 表示如果value属性的值为null时所输出的默认值。
实例
<c:out value="${sessionScope.userName}" [ escapeXml="{true}"] [default="输出默认值"]/>
②<c:set>标签
<c:set>标签用于设置各种范围域的属性值
语法
<c:set var="varName" value="value" [scope="{page|request|session|application}"]/>
- var表示要设置的范围域的属性名
- value 指定var属性的属性值
- scope 指定var属性所属的范围域,默认是page
实例
<c:set var="username" value="哼哼的博客" scope="session}"/>
③<c:remove>标签
<c:remove>标签用于删除各种范围域的属性
语法
<c:remove var="varName" [scope="{page|request|session|application}"]/>
- var表示要删除的范围域的属性名
- scope 指定要删除的属性所属的范围域
实例
<c:remove var="username" scope="session"/>
④<c:catch>标签
<c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常。
语法
<c:catch [var="varName"]>
nested actions
</c:catch>
- var属性用于标识捕获的异常对象的名称,并将异常对象保存在page域中。
- 若未指定var属性,则仅捕获异常而不在page域中保存对象。
实例
<c:catch var ="myException">
<%=5/0 %>
</c:catch>
<c:out value="${myException}"></c:out><br>
<c:out value="${myException.message}"></c:out>
1.2 条件标签
①<c:if>标签
<c:if>标签用于进行条件判断
<c:if test="condition" [var="varName"] [scope="{page|request|session|application}"]>
//conditon为true时的代码
</c:if>
- test用于指定条件表达式,返回boolean类型值
- var用于指定将test属性执行结果保存到某个范围作用域的属性名称
- scope 用于指定范围
实例
<c:if test="${not empty sessionScope.username}" var="username" scope="session">
欢迎你,${username}
</c:if>
②<c:choose>标签
用于指定多个条件选择,必须与<c:when>和<c:otherwise>标签一块使用。
语法
<c:choose>
//<c:when>或<otherwise>子标签
</c:choose>
- <c:choose>标签没有属性
实例
<c:choose>
<c:when test="${not empty sessionScope.username}">
欢迎你,${username}
</c:when>
<c:otherwise>
欢迎游客
</c:otherwise>
</c:choose>
③<c:when>标签
<c:when>标签是一个条件的分支,必须以<c:choose>为父标签,且必须在<c:otherwise>标签之前。
语法
<c:when test="condition" >
//conditon为true时的代码
</c:when>
④<c:otherwise>标签
<c:otherwise>标签在<c:choose>标签中前面所有的<c:when>标签都不符合条件时才会执行<c:otherwise>标签。
语法
<c:otherwise>
//执行的代码
</c:otherwise>
1.3迭代标签
①标签 标签用于遍历标签或者指定的迭代次数 语法<c:forEach [var="varName"] items="collection"
[varStatus="varStatusName"] [begin="begin"] [end = "end"] [step="step"]>
//标签体内容
</c:forEach>
- var表示保存到page域中的属性名
- itens要迭代的集合对象
- varStatus表示当前被迭代的对象状态
- begin表示遍历的起始值
- end 表示遍历的结束值
- step表示迭代的步长
实例
迭代数组对象
<%
String arrays[] = new String[5];
arrays[0]="这里是";
arrays[0]="哼哼的博客";
arrays[0]="希望对你";
arrays[0]="有帮助";
arrays[0]="你也可以关注一下,后续会有更好的博客推出";
request.setAttribute("arrays", arrays);
%>
<c:forEach var="str" items="${arrays}">
${str}
</c:forEach>
迭代集合对象
<%
List<Book> bookList = new ArrayList<>();
bookList.add(new Book("javaWeb应用与开发"));
bookList.add(new Book("java开发基础"));
request.setAttribute("book", bookList);
%>
<c:forEach var ="book" items="${request.bookList} varStatus="vst">
<p>序号: ${vst.index+1},书名:${${book.BookName}</p>
</c:forEach>
迭代Map对象
<%
Map<String,Book> map = new HashMap<>();
map.put("javaWeb",new Book("javaWeb开发与应用"));
map.put("javase",new Book("java开发基础"));
request.setAttribute("map", map);
%>
<c:forEach var ="bookMap" items="${request.map}">
<p>${bookMap.key}*****${bookMap.value.bookName}</p>
</c:forEach>
1.4URL相关的标签
①<c:url>标签
<c:url>标签用于在jsp页面中构造一个URL地址
语法
<c:url value="value" [var="varName"] [scope="{page|request|session|application}"]
[context="context"] [<c:param name="paramName" value="value"/>]>
</c:url>
- value要构造的URL地址
- var属性名称
- 指定URL地址所属同意容器下的web应用的上下文
- <c:param/>指定传递的参数

<c:param>标签
语法1:將属性值指定給value属性
<c:param name="name" value="value"/>
语法2:將属性值指定給本体內容
<c:param name="name">
parameter value
</c:param>
<c:param>标签放在<c:url>本体內容当中,可用来设定连接所要传递的参数內容:
<c:url value=urlstring >
<c:param name="firstPara" value="123456" />
</c:url>
②<c:import>标签
载入外部文件
语法1:载入数据内容直接嵌入标签或是输出成为String对象
<c:import url="url" [context="context"]
[var="varName"] [scope="{page|request|session|application}"]
[charEncoding="charEncoding"]>
optional body content for <c:param> subtags
</c:import>
<c:import url="http://www.baidu.com"/>
③<c:redirect>标签
重新定向网页
语法1:无主体(body)内容
<c:redirect url="value" [context="context"]/>
语法2:指定搜寻字符串参数的主体内容 ,带参数
<c:redirect url="value" [context="context"]/>
<c:param> subtags
</c:redirect>
(2)I18N标签库
实现国际化 语法 <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
2.1格式化标签
①<fmt:formateDate>标签
日期格式化标签
语法:
<fmt:formatDate value="date" [type="{time|date|both}"]
[dateStyle="{default|short|medium|long|full}"]
[timeStyle="{default|short|medium|long|full}"]
[pattern="customPattern"]
[timeZone="timeZone"]
[var="varName"]
[scope="{page|request|session|application}"]/>
- value要格式化的日期或者时间
- type指定是输出日期不分还是时间部分,还是两者都输出
- dateType指定日期的输出格式
-timeType指定时间输出的格式 - pattern指定一个自定义的日期或者时间的输出格式
- var 属性名称
- scope指定作用域范围
- timeZone指定时区
代码演示
<fmt:formatDate value="<%=new Date()%>"/><br>
<fmt:formatDate value="<%=new Date()%>" pattern="yyyy-MM-dd HH:mm:ss" /><br>
<fmt:formatDate value="<%=new Date()%>" type="both" dateStyle="full" /><br>
<fmt:formatDate value="<%=new Date()%>" type="both" timeStyle="medium" />
输出结果

(3)函数库标签
语法
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>


本文详细介绍Java标准标签库(JSTL)的功能与使用方法,包括核心标签库、I18N标签库、SQL标签库、XML标签库及函数标签库。通过示例展示如何利用JSTL简化JSP页面的开发工作。
&spm=1001.2101.3001.5002&articleId=96576975&d=1&t=3&u=2324ee401f6c40ce8bc1847c700bf32a)
3211

被折叠的 条评论
为什么被折叠?



