在 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之後的 uri
是 http://java.sun.com/jsp/jstl/core
)。在JSP網頁上,同樣也要使用 taglib
指示元素定義前置文字與 uri
。
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%>