在本章中,我們將了解JSP中的不同標籤。JSP標準標籤庫(JSTL)是一個有用的JSP標籤的集合,它封裝了許多JSP應用程式通用的核心功能。
JSTL支援常見的結構性任務,如疊代和條件,用於處理XML文件的標籤,國際化標籤和SQL標籤。 它還提供了一個框架,用於將現有的自定義標籤與JSTL標籤整合。
要開始使用JSP標籤,需要先安裝JSTL庫。如果使用的是Apache Tomcat容器,請按照以下兩個步驟進行操作:
步驟1 - 從Apache Standard Taglib下載二進位制檔案並解壓縮壓縮檔案。
步驟2 - 要從Jakarta Taglibs發行版中使用標準Taglib,只需將發行版「lib」
目錄中的JAR檔案複製到應用程式的`webapps\ROOT\WEB-INF\lib目錄中即可。
要使用JSTL的任何庫,必須在使用該庫的每個JSP的頂部包含一個<taglib>
指令。例如 -
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
根據JSTL標籤的功能,JSTL標籤可以分為以下JSTL標籤庫組,可以在建立JSP頁面中使用 -
核心組標籤是最常用的JSTL標籤。 以下是在JSP中包含JSTL Core庫的宣告(匯入)語法 -
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
下表列出了核心JSTL標籤使用範例 -
編號 | 標籤 | 描述 |
---|---|---|
1 | <c:out | 類似<%= ...> ,但僅對於表示式使用。 |
2 | <c:set | 在「範圍」中設定表示式求值的結果 |
3 | <c:remove | 刪除範圍變數(從指定的特定範圍中)。 |
4 | <c:catch | 捕捉發生在其主體中的任何可丟擲物件,並可選地暴露它。 |
5 | <c:if | 簡單的條件標籤,如果提供的條件為真,則對其主體進行評估。 |
6 | <c:choose | 簡單的條件標籤,用於建立互斥條件操作的上下文,標記為<when> 和<otherwise> 。 |
7 | <c:when | 如果條件評估為true ,則包含<choose> 的子標籤。 |
8 | <c:otherwise | <when> 標籤之後的<choose> 子標籤,只有當所有先前條件都被評估為false 時才執行。 |
9 | <c:import | 檢索絕對或相對URL,並將其內容公開到頁面,"var" 中的字串或"varReader" 中的"Reader" 。 |
10 | <c:forEach | 基本的疊代標籤,接受許多不同的集合型別,並支援子集和其他功能。 |
11 | <c:forTokens | 疊代令牌,由指定的分隔符來分隔。 |
12 | <c:param | 將引數新增到包含「import」 標籤的URL。 |
13 | <c:redirect | 重定向到新的URL。 |
14 | <c:url | 建立可選查詢引數的URL |
JSTL格式化標籤用於格式化和顯示國際化網站的文字,日期,時間和數位。 以下是在JSP中包含格式化庫的語法 -
<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
下表列出了格式化JSTL標籤 -
編號 | 標籤 | 描述 |
---|---|---|
1 | <fmt:formatNumber | 以特定精度或格式呈現數值。 |
2 | <fmt:parseNumber | 解析數位,貨幣或百分比的字串表示形式。 |
3 | <fmt:formatDate | 使用提供的樣式和模式格式化日期和/或時間。 |
4 | <fmt:parseDate | 解析日期和/或時間的字串表示形式 |
5 | <fmt:bundle | 載入到其標籤體中使用資源包。 |
6 | <fmt:setLocale | 在locale組態變數中儲存給定的區域設定。 |
7 | <fmt:setBundle | 載入資源包並將其儲存在命名作用域變數或包組態變數中。 |
8 | <fmt:timeZone | 指定巢狀在其正文中的任何時間格式化或解析操作的時區。 |
9 | <fmt:setTimeZone | 在時區組態變數中儲存給定的時區 |
10 | <fmt:message | 顯示國際化訊息。 |
11 | <fmt:requestEncoding | 設定請求字元編碼 |
JSTL SQL標籤庫提供與關聯式資料庫(RDBMS)進行互動的標記,如:Oracle,MySQL或Microsoft SQL Server。
以下是在JSP中包含JSTL SQL庫的語法 -
<%@ taglib prefix = "sql" uri = "http://java.sun.com/jsp/jstl/sql" %>
下表列出了JSTL的SQL標籤 -
編號 | 標籤 | 描述 |
---|---|---|
1 | <sql:setDataSource | 建立一個僅適用於原型設計的簡單DataSource |
2 | <sql:query | 執行在其正文中或通過sql屬性定義的SQL查詢。 |
3 | <sql:update | 執行在其正文中或通過sql屬性來定義SQL更新。 |
4 | <sql:param | 將SQL語句中的引數設定為指定的值。 |
5 | <sql:dateParam | 將SQL語句中的引數設定為指定的java.util.Date 值。 |
6 | <sql:transaction | 提供了一個共用的連線,設定為執行所有語句作為一個事務巢狀資料庫動作要素。 |
JSTL XML標籤提供了一種以JSP為中心的建立和操作XML文件的方法。 以下是在JSP中包含JSTL XML庫的語法。
JSTL XML標記庫具有與XML資料互動的自定義標籤。 這包括解析XML,轉換XML資料以及基於XPath表示式的流控制。語法如下所示 -
<%@ taglib prefix = "x" uri = "http://java.sun.com/jsp/jstl/xml" %>
在繼續執行範例之前,需要將以下兩個XML和XPath相關的庫複製到<Tomcat安裝目錄>\lib
中 -
以下是關於XML的JSTL標籤的列表 -
編號 | 標籤 | 描述 |
---|---|---|
1 | <x:out | 類似於<%=...> ,但對於XPath表示式。 |
2 | <x:parse | 用於解析通過屬性或標籤體指定的XML資料。 |
3 | <x:set | 將一個變數設定為XPath表示式的值。 |
4 | <x:if | 評估一個測試XPath表示式,如果結果為true ,它處理其主體。如果測試條件為false ,則主體被忽略。 |
5 | <x:forEach | 迴圈XML文件中的節點。 |
6 | <x:choose | 簡單的條件標籤,用於為相互排斥的條件操作建立上下文,由<when> 和<otherwise> 標籤標記。 |
7 | <x:when | 如果<select> 的表示式計算為true ,則包含其主體的子標籤。 |
8 | <x:otherwise | 只有當所有先前的條件評估為true 時,<choose> 標籤才能跟隨<when> 標籤。 |
9 | <x:transform | 在XML文件上應用XSL轉換 |
10 | <x:param | 與變形標籤一起使用,以在XSLT樣式表中設定引數 |
JSTL包括許多標準函式,其中大部分是常見的字串操作功能。 以下是在JSP中包含JSTL函式庫的語法 -
<%@ taglib prefix = "fn" uri = "http://java.sun.com/jsp/jstl/functions" %>
下表列出了各種JSTL函式 -
編號 | 標籤 | 描述 |
---|---|---|
1 | fn:contains() | 測試輸入字串是否包含指定的子字串。 |
2 | fn:containsIgnoreCase() | 測試輸入字串是否以不區分大小寫的方式包含指定的子字串。 |
3 | fn:escapeXml() | 跳脫可解釋為XML標記的字元。 |
4 | fn:indexOf() | 返回指定子字串第一次出現在字串中的索引。 |
5 | fn:endsWith() | 測試輸入字串是否以指定的字尾結尾。 |
6 | fn:join() | 將陣列的所有元素連線到字串中。 |
7 | fn:length() | 返回集合中的專案數,或字串中的字元數。 |
8 | fn:replace() | 返回一個由輸入字串替換所有出現的字串所引起的字串。 |
9 | fn:split() | 將一個字串拆分成一個子字串陣列 |
10 | fn:startsWith() | 測試輸入字串是否以指定的字首開頭。 |
11 | fn:substring() | 返回字串的一個子集。 |
12 | fn:substringAfter() | 返回特定子字串後面的字串的子集。 |
13 | fn:substringBefore() | 返回字串在特定子字串之前的子集。 |
14 | fn:toLowerCase() | 將字串的所有字元轉換為小寫。 |
15 | fn:toUpperCase() | 將字串的所有字元轉換為大寫。 |
16 | fn:trim() | 從字串的兩端刪除空格。 |