JavaWeb:JSP標准標簽庫
說明
什么是JSTL?
JSP標准標簽庫(JavaServer Pages Standard Tag Library,JSTL)是一個定制的標簽庫的集合,用來解決像遍歷map或者集合、條件測試、XML處理,甚至數據庫訪問和數據操作等常見的問題。
JSTL庫的安裝
下載地址:
• 官方下載地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
• 菜鳥教程網下載地址:jakarta-taglibs-standard-1.1.2.zip
安裝:
將jakarta-taglibs-standard-1.1.2/lib/下的兩個jar文件:standard.jar和jstl.jar文件拷貝到/WEB-INF/lib/下並添加至環境變量。
然后在IDEA中加入tld約束文件:
同樣的操作加入其余四個tld約束文件:
區域 | URI | 前綴 |
---|---|---|
XML | http://java.sun.com/jsp/jstl/xml | x |
國際化 | http://java.sun.com/jsp/jstl/fmt | fmt |
數據庫 | http://java.sun.com/jsp/jstl/sql | sql |
函數 | http://java.sun.com/jsp/jstl/functions | fn |
在JSP中使用JSTL
在JSP頁面中引用JSTL庫,必須在在JSP頁面的開頭做以下聲明:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"> <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"> <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions">
說明:
前綴可以使任意的,但是為了更加規范,建議采用如此簡寫形式。
一般行為
<c:out>標簽
說明:
out標簽可以將一個表達式的結果打印到網頁上,這個表達式可以是基於<%=?%>的傳統形式,也可以是EL表達式。
演示:
1 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"> 2 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 3 <html> 4 <head> 5 <title>$Title$</title> 6 </head> 7 <body> 8 <%--默認值有兩種表示方式--%> 10 <c:out value="${param.username}"> 11 默認值 12 </c:out> 13 14 <c:out value="${param.username}" default="默認值"/> 15 </body> 16 </html>
<c:set>標簽
說明:
set標簽具有以下三個作用:
1.為String類型的命名變量設定值。
2.如果命名變量為JavaBean,那么為這個JavaBean對象的特定屬性設定值。
3.如果命名變量為Map類型,那么為這個Map對象中的特定Key設定值。
演示:
1.為String類型的命名變量設定值。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <c:set var="命名變量的名字" value="哈哈哈" scope="session"/> <c:set var="user" value="Tom" scope="session"/> <c:out value="${sessionScope.user}" default="unknow"/> </body> </html>
2.如果命名變量為JavaBean,那么為這個JavaBean對象的特定屬性設定值。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <jsp:useBean id="product" scope="session" class="domain.Product"/> <html> <head> <title>Title</title> </head> <body> <c:set target="${product}" property="name" value="白象方便面"/> <c:out value="${product.name}" default="unknow"/> </body> </html>

3.如果命名變量為Map類型,那么為這個Map對象中的特定Key設定值。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <jsp:useBean id="hashmap" class="java.util.HashMap" scope="request"/> <html> <head> <title>Title</title> </head> <body> <c:set target="${hashmap}" property="1" value="Monday"/> <c:set target="${hashmap}" property="2" value="Tuesday"/> <c:set target="${hashmap}" property="3" value="Wednesday"/> <c:out value="${hashmap.get('1')}" default="unknow"/> </body> </html>
<c:remove>標簽
說明:
reomve標簽用於刪除特定范圍內的命名變量。
演示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <jsp:useBean id="hashmap" class="java.util.HashMap" scope="request"/> <html> <head> <title>Title</title> </head> <body> <c:set target="${hashmap}" property="1" value="Monday"/> <c:remove var="hashmap" scope="request"/> <c:out value="${hashmap.get('1')}" default="unknow"/> </body> </html>
條件行為
<c:if>標簽
說明:
用於實現Java語言中的if語句的功能。
演示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%--測試結果將保存在result變量中--%> <c:if test="${param.username=='Tom'}" var="result" scope="request"> <%--如果測試成功,則會輸出true--%> <c:out value="${result}"/> </c:if> </body> </html>
<c:choose>、<c:when>、<c:otherwise>
說明:
<c:choose>、<c:when>、<c:otherwise>三個標簽一起連用,可以實現Java語言中的if-else語句的功能。
演示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <c:choose> <c:when test="${empty param.username}"> Noknown user </c:when> <c:when test="${param.username=='Tom'}"> Tom </c:when> <c:otherwise> Other </c:otherwise> </c:choose> </body> </html>
迭代標簽
<c:forEach標簽>
說明:
forEach標簽用於遍歷集合中的對象,並且能重復執行標簽主體。
演示:
1.基本用法:
<%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% List books = new ArrayList(); books.add("JavaWeb程序設計"); books.add("Java程序設計"); books.add("JSP程序設計"); %> <c:forEach var="book" items="<%=books%>"> ${book} </c:forEach> </body> </html>

2.foreach的varStatus屬性
varStatus屬性用於設定一個LoopTagStatus類型的命名變量,它位於NESTED范圍,這個命名變量包含了從集合中取出的當前元素的狀態信息。
• count 當前元素在集合中的序號,從1開始計數。
• index 當前元素在集合中的索引,從0開始計數。
• first 當前元素是否時集合中的第一個元素
• last 當前元素是否是集合中的最后一個元素
<%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% List books = new ArrayList(); books.add("JavaWeb程序設計"); books.add("Java程序設計"); books.add("JSP程序設計"); %> <c:forEach var="book" items="<%=books%>" varStatus="status"> ${status.count} ${status.index} ${status.first} ${status.last} ${book}<br> </c:forEach> </body> </html>

3.begin、end、step
begin、end、step分別指定循環的起始索引、結束索引和步長。
<%@ page import="java.util.List" %> <%@ page import="java.util.ArrayList" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% List books = new ArrayList(); books.add("JavaWeb程序設計"); books.add("Java程序設計"); books.add("JSP程序設計"); %> <c:forEach var="book" items="<%=books%>" varStatus="status" begin="1" end="2" step="1"> ${status.count} ${status.index} ${status.first} ${status.last} ${book}<br> </c:forEach> </body> </html>
4.可以遍歷的集合
forEach可以遍歷的集合包括:
• Set、List、Map、Iterator、Enumeration接口的實現類。
<%@ page import="java.util.HashMap" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% HashMap hashMap = new HashMap(); hashMap.put("one","Monday"); hashMap.put("two","Tuesday"); hashMap.put("three","Wednesday"); %> <c:forEach var="week" items="<%=hashMap%>"> ${week.key} ${week.value}<br> </c:forEach> </body> </html>
• Java數組
• 以逗號隔開的字符串
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% String names = "Tom,Mike,Juice"; %> <c:forEach var="name" items="<%=names%>"> ${name}<br> </c:forEach> </body> </html>
<c:forTokens>標簽
說明:
forTokens標簽用於遍歷字符串中用特定分隔符分割的子字符串,並且能重復執行標簽主體。
演示:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% String names = "Tom|Mike|Juice"; %> <c:forTokens var="name" items="<%=names%>" delims="|"> ${name}<br> </c:forTokens> </body> </html>
未完待續...