如何用JSP將內容導入Web站點
發表于:2007-06-13來源:作者:點擊數:
標簽:
JSTL轉換粘結劑(redux) 清單 1. 經常轉換索引頁(請注意jsp:include元素) %@ page language="java" contentType="text/html" % %@ taglib prefix="c" uri="http://java.sun.com/jstl/core" % html head titlenewInstance.com/title meta http-equiv="Conten
JSTL轉換粘結劑(redux)
清單 1. 經常轉換索引頁(請注意jsp:include元素)
<%@ 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>
<jsp:include page="header.jsp" flush="true">
<jsp:param name="pageTitle" value="newInstance.com"/>
<jsp:param name="pageSlogan" value=" " />
</jsp:include>
<%@ include file="/navigation.jsp" %>
<c:import url="bookshelf.jsp" />
<c:import url="/mt-blogs/index.jsp" />
<%@ include file="/footer.jsp" %>
</body>
</html>
|
轉換參數標記
由于已經轉換了使用 c:import
而不是 jsp:include
標記的幾乎整個索引文件,因此,我們最后的工作就是轉變仍然傳遞 jsp:include
元素的參數,即采用 c:import
標記來模仿 jsp:include
的特性。如清單2所示,我們需要將 jsp:param
轉換為 c:param
;因為 c:param
函數類似于JSP的相應功能,因而我們可以輕松處理。
清單2表明,清單1的索引文件已完全轉換為JSTL:
清單 2. 完整的JSTL轉換
<%@ 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"/>
<c:param name="pageSlogan" value=" " />
</c:import>
<%@ include file="/navigation.jsp" %>
<c:import url="bookshelf.jsp" />
<c:import url="/mt-blogs/index.jsp" />
<%@ include file="/footer.jsp" %>
</body>jsp:include
</html>
|
不過您一定要記著, c:param
和 jsp:param
非常相似?,F在,讓我們進一步研究 c:import
的更多新功能。
導入外部內容
使用 c:import
的真正優勢在于,它可以引入外部Web站點的內容或Web應用程序。在前面學習jsp:includes時,您可能已經注意到,我們使用file(文件)屬性來為include指定靜態內容。file(文件)屬性正如其名稱所示:使您可以引入本地文件的內容。 c:import
的相應屬性為 url
,它也正如其名稱所示:使您能夠引入任何URL。 c:import
不僅可以使用本地文件的內容來填充您的站點網頁,而且還允許您引入任何URL的內容,使其它站點的內容可以真正靈活地適應您自己站點的外觀和風格。
讓我們舉一個實例。我把馬達加斯加島紅木吉他的一些美麗圖片放到我的Web站點。當我制作自己的網頁并完成一些圖像文件和相關鏈接之后,我可以輕松地引入另一個站點的內容,然后使其適合自己站點的外觀和風格。清單3表明,使用 c:import
的 url
屬性,可以多么容易地引入我所相中的吉他站點的圖像文件:
清單 3. 導入外部內容
<%@ 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
文件,以便用戶可以查看如何使用該站點。您可以參考以下現有FTP站點的說明:
<c:import url="ftp://ftp.oreilly.com/pub/README.ftp" />
|
請注意,這非常簡單,就如同引入HTTP材料一樣導入FTP服務器內容。您可以使用同樣的HTTPS命令以及您的站點和目標站點可以識讀的任何其它協議。
為什么要采用JSTL?
在核心JSP標記上使用JSTL有以下幾大優勢。首先,JSTL現在采用獨立于JSP標記的規范來定義。因此,即使JSP規范發生改動,也可以保證 JSTL標記的一致性。容易受到JSP容器變更影響的許多應用程序都將受益于JSTL規范.其次,JSTL具有比核心JSP標記更強大的功能,正如您在最佳實踐系列中所視, c:import不僅
可以導入其它站點的URL,而且,它還可以導入 jsp:include
標記不可用的更為復雜的內容。最后,JSTL使用自己的表達式語言(通常簡稱為EL)。JSTL EL可以相當靈活地寫入JSP代碼,是對核心JSP語言的有力補充。
(責任編輯:城塵)