為什麼要採用JSTL?
在核心JSP標記上使用JSTL有以下幾大優勢。
首先,JSTL現在採用獨立於JSP標記的規範來定義。因此,即使JSP規範發生改動,也可以保證JSTL標記的一致性。容易受到JSP容器變更影響的許多應用程式都將受益於JSTL規範.
其次,JSTL具有比核心JSP標記更強大的功能,正如您在最佳實務系列中所視, c:import不僅 可以匯入其它網站的URL,而且,它還可以匯入 jsp:include 標記停用更為複雜的內容。
最後,JSTL使用自己的運算式語言(通常簡稱為EL)。JSTL EL可以相當靈活地寫入JSP代碼,是對核心JSP語言的有力補充。
JSTL的 c:import 在模仿JSP的include原理。但是,如果深入研究 c:import (或任何JSTL標記),您將發現許多其它功能。除了分配參數並管理本地檔案內容以外, c:import 還可以引入外部網站的內容。
類似於 jsp:include , c:import 使用各種參數以便可在Web網站靈活移動內容。但與include指令不同,c:import 並不限制訪問本地檔案。
jsp:include:
<jsp:include page="header.jsp" flush="true">
<jsp:param name="pageTitle" value="newInstance.com"/>
<jsp:param name="pageSlogan" value=" " />
</jsp:include>
JSTL C:import
<c:import url="header.jsp">
<c:param name="pageTitle" value="newInstance.com"/>
<c:param name="pageSlogan" value=" " />
</c:import>
c:param 和 jsp:param 非常相似。
匯入外部內容
使用 c:import 的真正優勢在於,它可以引入外部Web網站的內容或Web應用程式。在前面學習jsp:includes時,您可能已經注意到,我們使用file(檔案)屬性來為include指定靜態內容。file(檔案)屬性正如其名稱所示:使您可以引入本地檔案的內容。 c:import 的相應屬性為 url ,它也正如其名稱所示:使您能夠引入任何URL。c:import 不僅可以使用本地檔案的內容來填充您的網站網頁,而且還允許您引入任何URL的內容,使其它網站的內容可以真正靈活地適應您自己網站的外觀和風格。
<%@ page language="java" contentType="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <html> <head> <title>newInstance.com</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link href="/styles/default.css" rel="stylesheet" type="text/css" /> </head> <body> <c:import url="header.jsp"> <c:param name="pageTitle" value="newInstance.com :: True North Guitars"/> <c:param name="pageSlogan" value="...building it from scratch" /> </c:import> <%@ include file="/navigation.jsp" %> <c:import url="bookshelf.jsp" /> <c:import url="http://www.truenorthguitars.com/Clients/Richman/index.htm" /> <%@ include file="/footer.jsp" %> </body> </html>
這些代碼看上去沒有問題——但是,如果您試著在自己網站運行,您很快就會發現問題。所有映像都不顯示,並且相關連結全部出現故障。當然,如果仔細想想,原因很很簡單。因為外部資源(本例中是影像檔)被解釋(interpreted),而您將解釋結果直接匯入您的輸出資料流。外部影像檔連結如 /images/guitar-01-24.jpg 將顯示不存在。解決該問題的唯一方法是將原映像複製到您的網站,與簡單的匯入相比,這是一項完全不同(並且消耗更多時間)的技術。
因此,最好知道要匯入的外部內容是否是純文字。例如,要考慮串連到系統管理員的網站及其本身的標頭檔、腳註檔案、外觀和風格。該網站的網頁詳細說明如何設定 README 檔案,以便使用者可以查看如何使用該網站。