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