簡介 JSTL


在 Servlet 中撰寫 HTML 進行頁面輸出當然是件麻煩的事,第8章學過JSP後,你終於可以在 JSP 中直接寫 HTML。然而,在 JSP 中寫 Scriptlet 放入 Java 程式碼也不是什麼好事,這跟 Servlet 中撰寫 HTML 相比其實是件半斤八兩的事。

如果你使用 Model 2 架構,你可以將請求處理放到 Servlet,將商務邏輯放到純綷 Java 物件中,在 JSP 上則使用EL來取得值並顯示。如果你使用 Model 1,你也可以將商務邏輯放到 JavaBean 中,在 JSP 上透過 <jsp:useBean><jsp:setProperty><jsp:getProperty> 等標籤以及來處理請求並取得結果進行顯示。

然而就目前你所學到的技術,無論如何你還是得在 JSP 中使用 Scriptlet 撰寫 Java 程式碼,才可以讓畫面呈現出想要的結果。例如,需要依某個條件來決定是否顯示某個網頁片段,或是需要使用迴圈來顯示表格內容。然而,HTML 或 JSP 本身並沒有什麼 <if> 標籤,更沒什麼 <for> 標籤讓你達到這個目的。

所幸這些跟頁面呈現相關的邏輯判斷標籤是存在的,可由 Java EE 平台中的 JSTL 提供。JSTL 不僅提供了條件判斷的邏輯標籤,還提供了對應JSP標準標籤的擴充標籤以及更多的功能標籤。基本上,JSTL 提供的標籤庫分作五個大類:

  • 核心標籤庫

    提供條件判斷、屬性存取、URL 處理及錯誤處理等標籤。本章會針對核心標籤庫的功能與作用進行說明。

  • 格式標籤庫

    提供數字、日期等的格式化功能,以及區域(Locale)、訊息、編碼處理等國際化功能的標籤。

  • SQL 標籤庫

    提供基本的資料庫查詢、更新、設定資料來源(DataSource)等功能之標籤。

  • XML 標籤庫

    提供XML剖析、流程控制、轉換等功能之標籤。

  • 函式標籤庫

    提供常用字串處理的自訂EL函式標籤庫。

JSTL 是另一個標準規範,本身並非在 JSP 的規範當中,所以必須另外下載 JSTL 的 API 與實作:

http://www.oracle.com/technetwork/java/index-jsp-135995.html

可以透過上面這個網頁找到 JSTL 的相關下載與 API 文件說明。下載了 JSTL 實作(封裝好的 JAR 檔案)之後,必須放置到 Web 應用程式的 WEB-INF/lib 資料夾中。

JSTL 的標籤種類也蠻多的,這邊的文件只說明 JSTL 核心標籤庫。其它的標籤庫則請參考 JSTL 文件說明。要使用 JSTL 核心標籤庫,必須在 JSP 網頁上,使用 taglib 指示元素定義前置文件與 uri 參考。

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

前置文件設定了這個標籤庫在此JSP網頁中的名稱空間,以避免與其它標籤庫的標籤名稱發生衝突,慣例上使用 JSTL 核心標籤庫時,會使用c作為前置名稱。uri 參考則告知容器,如何參考JSTL標籤庫實作。

如果你必須使用 JSTL 1.0(適用於古老的 JSP 1.2、J2EE 1.3 環境),除了要將 JAR 複製至 WEB- INF/lib 資料夾,還需複製 TLD 檔案,並於 web.xml 中設定 TLD 檔案的位置。例如要使用核心標籤庫的話,需在 web.xml 中設定:

<taglib>
    <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
    <taglib-location>/WEB-INF/tlds/c.tld</taglib-uri>
</taglib>

注意 uri 名稱與 JSTL 1.1之 後不一樣(1.1之後的 urihttp://java.sun.com/jsp/jstl/core)。在JSP網頁上,同樣也要使用 taglib 指示元素定義前置文字與 uri

<%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%>