使用JSP include機(jī)制改進(jìn)外觀
所有***實踐都基于 JavaServer Pages 技術(shù)。要運(yùn)行任何一種實踐,需要在本地機(jī)器或測試服務(wù)器上設(shè)置符合 JSP 的 Web 容器,如 Apache Tomcat。您還需要使用文本編輯器或 IDE 編寫 JSP 頁面代碼。請參閱參考資料,獲取 Tomcat 和與 JSP 兼容的 Web 容器和 IDE 的清單的鏈接。
更好的外觀
為 Web 頁面創(chuàng)建一致的設(shè)計和布局是確保獲得專業(yè)化外觀的最容易方法之一。您或許看過足夠多的網(wǎng)站,知道單個站點中的大部分頁面都共用統(tǒng)一的頁面頭、頁面尾以及某種類型的導(dǎo)航欄。在設(shè)計良好的站點上,這些元素將在每個頁面上呈現(xiàn)相同的布局、內(nèi)容和功能,而主面板(通常稱為內(nèi)容窗格)會隨著每個視圖而變化。
以前,這種布局幾乎完全由框架和框架集實現(xiàn)。每段靜態(tài)內(nèi)容被放置在一個框架中,而頁面的主體內(nèi)容被放置在中間框架中。框架的麻煩就是不同的瀏覽器常常會以不同方式顯示它們,使它們的外觀不一致。使用框架從內(nèi)部頁面鏈接外部站點則比想像的更加困難。原本是想允許用戶在不離開站點的情況下查看外部內(nèi)容,但結(jié)果往往不一致。用戶最終看到的是整個站點被擠進(jìn)小得多的框架中,更糟的是,您的站點最終會嵌套在另一個站點框架中。這種混亂驅(qū)使 Web 設(shè)計者尋找一種更佳的解決方案。服務(wù)器端 include(server-side include,SSI)就是一種。
服務(wù)器端 include
不久前,SSI 還是用于創(chuàng)建共享內(nèi)容的***的選項之一。簡單的 SSI 偽指令允許您創(chuàng)建包含另一個頁面內(nèi)容(如頭和腳注文件)的頁面,如下面所示。
Simple SSI test - This content is statically in the main HTML file.
- ]]>
我們不久將使用該文件來做一個練習(xí)。目前,您應(yīng)該將它另存為 test-ssi.shtml。在大多數(shù)設(shè)置中,SSI 文件必須以 .shtml 結(jié)尾,這讓 Web 服務(wù)器知道將它們解析為 SSI 偽指令。下面顯示了名為 included.html 的包含文件的內(nèi)容。
- This content is in another file, included.html
- ]]>
當(dāng)請求 test-ssi.shtml 時,您將看到該文件的內(nèi)容以及 included.html 的內(nèi)容。您可以在任何支持 SSI 的 Web 容器(如 Apache Tomcat,請參閱參考資料)上查看這些文件。
從用戶角度看,SSI 與框架相比有重大改進(jìn),因為在單個文件和從其它被包含文件引進(jìn)內(nèi)容的文件之間沒有顯而易見的差別。不利方面就是 SSI 需要一種特定的服務(wù)器設(shè)置,而 Java 開發(fā)人員常常無法使用這種設(shè)置。另外,SSI 通常要求被包含內(nèi)容是靜態(tài)的,盡管在后面的版本中加入了動態(tài)內(nèi)容包含。
對于在網(wǎng)站或 Web 應(yīng)用程序中包含不同類型的內(nèi)容來說,SSI 是可行的解決方案,但它們不是 Java 開發(fā)人員的***選擇。這不僅因為 JavaServer Pages 技術(shù)是替代 SSI 的全 Java 技術(shù),還因為這兩種技術(shù)不太容易結(jié)合在一起。JSP 頁以擴(kuò)展名 .jsp 結(jié)尾,這表示要使 SSI 偽指令起作用,必須更改 SSI 配置以解析 JSP 文件(給每個 JSP 頁解析增加開銷),或者更改 JSP 配置以將 .shtml 擴(kuò)展名作為 JSP 頁處理(這是一個壞主意)。對于 Java 開發(fā)人員來說,JSP 技術(shù)是***的內(nèi)容管理解決方案,幸運(yùn)的是,其 include 機(jī)制很容易掌握。
JSP include
JSP include 偽指令與其 SSI 對等偽指令極其相似。下面是 SSI 偽指令的 JSP 對等偽指令。任何支持 JSP 的 Web 容器都將處理該 JSP 頁的顯示(同樣,請參閱參考資料一節(jié),以獲得鏈接)。應(yīng)該將該文件另存為 test-include.jsp。
- <%@ page language="java" contentType="text/html" %>
JSP include element test - This content is statically in the main JSP file.
- <%@ include file="included.html" %>
- ]]>
include 偽指令使將統(tǒng)一的頭文件和腳注文件合并到您的站點變得非常容易。清單 4 顯示了具有幾個被包含文件的主索引頁。
- <%@ page language="java" contentType="text/html" %>
newInstance.com - <%@ include file="header.jsp" %>
- <%@ include file="navigation.jsp" %>
- <%@ include file="bookshelf.jsp" %>
- <%@ include file="/mt-blogs/index.jsp" %>
- <%@ include file="footer.jsp" %>
- ]]>
通過查看代碼,您將了解有關(guān)如何使用 JSP include 的各種方法。您還應(yīng)該試驗一下該代碼,讓自己掌握其工作原理。
添加動態(tài)內(nèi)容
除了如頭、腳注和導(dǎo)航文件之類的靜態(tài)內(nèi)容外,清單 4 還包括對 Weblog(/mt-blogs/index.jsp)的調(diào)用,這涉及動態(tài)內(nèi)容的主題。如同 SSI include 偽指令那樣,當(dāng) JSP include 機(jī)制應(yīng)用于動態(tài)內(nèi)容時會出現(xiàn)問題。可以通過使用 JSP include 偽指令來引入動態(tài)內(nèi)容,但將無法獲得對該內(nèi)容的更改。這是因為 Web 容器將被包含文件作為原始(包含)頁面的一部分讀取。容器將結(jié)果高速緩存為單個文件,而不是多個 JSP 組件。因為 Web 容器不會針對更改去輪詢被包含文件,所以它不會知道有任何更改發(fā)生,它將自動顯示高速緩存的頁面而不是刷新的頁面。要了解它的工作原理,我們將做一個簡單的練習(xí)。首先,將已保存的 included.html 頁面更新為下面所示的那樣。
- This content is in another file, included.html.
- Some new content...
- ]]>
接下來,保存這些更改,導(dǎo)航至 test-include.jsp 文件,刷新瀏覽器。您將注意到瀏覽器中沒有顯示 included.html 中的新內(nèi)容。被包含文件的內(nèi)容在更改發(fā)生之前就被高速緩存了,所以它不會顯示出來。如果您的站點包含動態(tài)內(nèi)容或可能被頻繁修改的內(nèi)容,那么這會是一個問題。幸運(yùn)的是,有一個變通方法。在下一個部分中,我將向您演示如何使用 標(biāo)記將動態(tài)內(nèi)容加入 Web 頁面。在此之前,請參考參考資料一節(jié)并試驗這里提供的代碼,我將在網(wǎng)上與您再見。
【編輯推薦】