JSTL 1.1 與 JSTL 1.2 之間的區別?如何下載 JSTL 1.2?
JSTL 1.2 中不要求 standard.jar 包。
您可以在 Maven 中央倉庫中找到它們。
http://repo2.maven.org/maven2/javax/servlet/jstl/
http://repo2.maven.org/maven2/taglibs/standard/
由於JSTL 1.1
已經過時,Apache已將其置於存檔中。選擇jakarta-taglibs-standard-current.zip
文件。
但是,如果您正在運行Servlet 2.5
兼容容器並且web.xml
聲明為至少Servlet 2.5
,
那么您應該能夠使用新的JSTL 1.2。
需要注意的是JSTL 1.2
並沒有要求standard.jar
。
根據JSTL標簽所提供的功能,可以將其分為5個類別。
- 核心標簽
- 格式化標簽
- SQL 標簽
- XML 標簽
- JSTL 函數
JSTL 庫安裝
從Apache的標准標簽庫中下載的二進包(jakarta-taglibs-standard-current.zip)。
下載 jakarta-taglibs-standard-1.1.2.zip 包並解壓,將 jakarta-taglibs-standard-1.1.2/lib/ 下的兩個 jar 文件:standard.jar 和 jstl.jar
文件拷貝到 /WEB-INF/lib/ 下。
將 tld 下的需要引入的 tld 文件復制到 WEB-INF 目錄下。
接下來我們在 web.xml 文件中添加以下配置:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <jsp-config> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri> <taglib-location>/WEB-INF/fmt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/fmt-rt</taglib-uri> <taglib-location>/WEB-INF/fmt-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri> <taglib-location>/WEB-INF/c.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/core-rt</taglib-uri> <taglib-location>/WEB-INF/c-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/sql</taglib-uri> <taglib-location>/WEB-INF/sql.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/sql-rt</taglib-uri> <taglib-location>/WEB-INF/sql-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/x</taglib-uri> <taglib-location>/WEB-INF/x.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/x-rt</taglib-uri> <taglib-location>/WEB-INF/x-rt.tld</taglib-location> </taglib> </jsp-config> </web-app>
使用任何庫,你必須在每個 JSP 文件中的頭部包含 <taglib> 標簽。
核心標簽
核心標簽是最常用的 JSTL標簽。引用核心標簽庫的語法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out> 標簽c:out
<c:out>標簽用來顯示一個表達式的結果,與<%= %>作用相似,
它們的區別就是<c:out>標簽可以直接通過"."操作符來訪問屬性。
如果想要訪問customer.address.street,只需要這樣寫:<c:out value="customer.address.street">。
語法格式
<c:out value="<string>" default="<string>" escapeXml="<true|false>"/>
<c:set> 標簽 c:set
<c:set>標簽用於設置變量值和對象屬性。
<c:set>標簽就是<jsp:setProperty>行為標簽的孿生兄弟。
這個標簽之所以很有用呢,是因為它會計算表達式的值,然后使用計算結果來設置 JavaBean 對象或 java.util.Map 對象的值。
<c:set var="salary" scope="session" value="${2000*2}"/> <c:out value="${salary}"/>
<c:remove> 標簽 c:remove
<c:remove>標簽用於移除一個變量,可以指定這個變量的作用域,若未指定,則默認為變量第一次出現的作用域。
這個標簽不是特別有用,不過可以用來確保JSP完成清理工作。
<c:remove var="<string>" scope="<string>"/>
<c:set var="salary" scope="session" value="${2000*2}"/> <p>salary 變量值: <c:out value="${salary}"/></p> <c:remove var="salary"/> <p>刪除 salary 變量后的值: <c:out value="${salary}"/></p>
<c:catch> 標簽 c:catch
<c:catch> 標簽主要用來處理產生錯誤的異常狀況,並且將錯誤信息儲存起來。
<c:catch var ="catchException"> <% int x = 5/0;%> </c:catch> <c:if test = "${catchException != null}"> <p>異常為 : ${catchException} <br /> 發生了異常: ${catchException.message}</p> </c:if>
<c:if> 標簽 c:if
<c:if>標簽判斷表達式的值,如果表達式的值為 true 則執行其主體內容。
<c:set var="salary" scope="session" value="${2000*2}"/> <c:if test="${salary > 2000}"> <p>我的工資為: <c:out value="${salary}"/><p> </c:if>
<c:choose>, <c:when>, <c:otherwise> 標簽 c:choose c:when c:otherwise
<c:choose>標簽與Java switch語句的功能一樣,用於在眾多選項中做出選擇。
switch語句中有case,而<c:choose>標簽中對應有<c:when>,
switch語句中有default,而<c:choose>標簽中有<c:otherwise>。
<c:set var="salary" scope="session" value="${2000*2}"/> <p>你的工資為 : <c:out value="${salary}"/></p> <c:choose> <c:when test="${salary <= 0}"> 太慘了。 </c:when> <c:when test="${salary > 1000}"> 不錯的薪水,還能生活。 </c:when> <c:otherwise> 什么都沒有。 </c:otherwise> </c:choose>
<c:import> 標簽 c:import
<c:import>標簽提供了所有<jsp:include>行為標簽所具有的功能,同時也允許包含絕對URL。
舉例來說,使用<c:import>標簽可以包含一個FTP服務器中不同的網頁內容。
<c:import var="data" url="http://www.runoob.com"/> <c:out value="${data}"/>
以上程序將會打印http://www.runoob.com"頁面的源代碼
<c:forEach>, <c:forTokens> 標簽 c:forEach c:forTokens
這些標簽封裝了Java中的for,while,do-while循環。
相比而言,<c:forEach>標簽是更加通用的標簽,因為它迭代一個集合中的對象。
<c:forTokens>標簽通過指定分隔符將字符串分隔為一個數組然后迭代它們。
<c:forEach>標簽有如下屬性:
屬性 | 描述 | 是否必要 | 默認值 |
---|---|---|---|
items | 要被循環的信息 | 否 | 無 |
begin | 開始的元素(0=第一個元素,1=第二個元素) | 否 | 0 |
end | 最后一個元素(0=第一個元素,1=第二個元素) | 否 | Last element |
step | 每一次迭代的步長 | 否 | 1 |
var | 代表當前條目的變量名稱 | 否 | 無 |
varStatus | 代表循環狀態的變量名稱 | 否 | 無 |
<c:forTokens>標簽與<c:forEach>標簽有相似的屬性,
不過<c:forTokens>還有另一個屬性:
delims | 分隔符 | 是 | 無 |
<c:forEach var="i" begin="1" end="5"> Item <c:out value="${i}"/><p> </c:forEach>
<c:forTokens>演示實例
<c:forTokens items="google,runoob,taobao" delims="," var="name"> <c:out value="${name}"/><p> </c:forTokens>
<c:param> 標簽 c:param
<c:param>標簽用於在<c:url>標簽中指定參數,而且與URL編碼相關。
在<c:param>標簽內,name屬性表明參數的名稱,value屬性表明參數的值。
<h1><c:param> 實例</h1> <c:url var="myURL" value="main.jsp"> <c:param name="name" value="Runoob"/> <c:param name="url" value="www.runoob.com"/> </c:url> <a href="/<c:out value="${myURL}"/>"> 使用 <c:param> 為指定URL發送兩個參數。</a>
<c:redirect> 標簽 c:redirect
<c:redirect>標簽通過自動重寫URL來將瀏覽器重定向至一個新的URL,它提供內容相關的URL,並且支持c:param標簽。
<c:redirect url="http://www.runoob.com"/>
<c:url> 標簽 c:url
<c:url>標簽將URL格式化為一個字符串,然后存儲在一個變量中。
這個標簽在需要的時候會自動重寫URL。
var屬性用於存儲格式化后的URL。
<c:url>標簽只是用於調用response.encodeURL()方法的一種可選的方法。它真正的優勢在於提供了合適的URL編碼,包括<c:param>中指定的參數。
<h1><c:url>實例 Demo</h1> <a href="<c:url value="http://www.runoob.com"/>"> 這個鏈接通過 <c:url> 標簽生成。 </a>