国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
JSP 最佳實(shí)踐: 用 jsp:include 控制動(dòng)態(tài)內(nèi)容
2003 年 7 月 06 日
本文是 Java Brett McLaughlin 繼第一篇 JSP 最佳實(shí)踐文章后的后續(xù)文章,在文中,作者向您演示了如何擴(kuò)展 JSP 技術(shù)中用于動(dòng)態(tài)內(nèi)容的包含功能。了解靜態(tài) include 偽指令和動(dòng)態(tài) jsp:include 元素之間的差異,搞清楚如何混合搭配這二者以獲取最優(yōu)性能。
在新的 JSP 最佳實(shí)踐系列的前一篇文章中,您了解了如何使用 JSP include 偽指令將諸如頁(yè)眉、頁(yè)腳和導(dǎo)航組件之類的靜態(tài)內(nèi)容包含到 Web 頁(yè)面中。和服務(wù)器端包含一樣,JSP include 偽指令允許某個(gè)頁(yè)面從另一個(gè)頁(yè)面提取內(nèi)容或數(shù)據(jù)。清單 1 重溫了 include 偽指令。
<![CDATA[ <%@ page language="java" contentType="text/html" %> <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> <%@ include file="header.jsp" %> <%@ include file="navigation.jsp" %> <%@ include file="bookshelf.jsp" %> <%@ include file="/mt-blogs/index.jsp" %> <%@ include file="footer.jsp" %> </body> </html> ]]>
本系列中的所有最佳實(shí)踐都基于 JavaServer Pages 技術(shù)。要運(yùn)行其中的任何最佳實(shí)踐,都需要在您的本地機(jī)器或測(cè)試服務(wù)器上安裝符合 JSP 技術(shù)的 Web 容器。您還需要使用文本編輯器或 IDE 來對(duì) JSP 頁(yè)面編碼。
雖然 include 非常適于將靜態(tài)內(nèi)容并入 Web 頁(yè)面,但對(duì)于動(dòng)態(tài)內(nèi)容卻不盡如人意。我們?cè)谇耙黄恼轮性谠噲D重新裝入高速緩存文件時(shí)發(fā)現(xiàn)了這一問題。與大多數(shù)頁(yè)眉文件及頁(yè)腳文件不同,動(dòng)態(tài)內(nèi)容變化頻繁,必須時(shí)刻更新。我們將首先扼要地重述一下 include 偽指令的局限性,然后我將向您演示如何用 jsp:include 標(biāo)記來擴(kuò)展 JSP 的包含能力。
回頁(yè)首
JSP include 偽指令的不足之處有一個(gè)是:它會(huì)導(dǎo)致 Web 瀏覽器高速緩存所有頁(yè)面。在處理諸如頁(yè)腳、版權(quán)聲明或一組靜態(tài)鏈接之類的靜態(tài)組件時(shí),這是有意義的。這些文件不會(huì)改變,因此沒有理由讓 JSP 解釋器不斷地重新輪詢其中的數(shù)據(jù)。凡是可能的地方,都應(yīng)該實(shí)現(xiàn)高速緩存,因?yàn)樗纳屏藨?yīng)用程序的性能。
在構(gòu)建 Web 應(yīng)用程序或網(wǎng)站時(shí),可能需要大量更新頁(yè)眉、頁(yè)腳和導(dǎo)航鏈接。僅僅為了看到對(duì)所包含文件所做的更改,而被迫不斷地關(guān)閉瀏覽器或清除其高速緩存,這可能是件痛苦的事情。另一方面,為了結(jié)束開發(fā)周期,而不得不徹底檢查一遍并修改數(shù)百個(gè)使用了 include 偽指令的頁(yè)面,這也是一件痛苦的事情。我的建議是,在測(cè)試期間禁用瀏覽器高速緩存。在大多數(shù)情形下,這樣做能夠徹底解決問題。也有極少數(shù)情形,這樣做并不奏效,這時(shí)可以在瀏覽器或服務(wù)器上不斷地重新啟動(dòng) Web 容器來確保不進(jìn)行高速緩存。
但是,有時(shí)侯,進(jìn)行高速緩存會(huì)得不償失。如果提入的內(nèi)容來自使用動(dòng)態(tài)數(shù)據(jù)(如 Weblog 或數(shù)據(jù)庫(kù)驅(qū)動(dòng)的 JSP 文件)的程序,甚至如果所包含的內(nèi)容是經(jīng)常變化的 HTML(如時(shí)間戳記),那么每當(dāng)裝入 Web 頁(yè)面時(shí),都需要顯示這些文件或程序的最新版本。遺憾的是,JSP include 偽指令并不具備這一功能。在測(cè)試和開發(fā)周期(請(qǐng)參閱側(cè)欄“JSP 測(cè)試和開發(fā)”)中,在瀏覽器中禁用高速緩存通常能夠解決這一問題。但是,對(duì)于實(shí)際使用的應(yīng)用程序而言,性能是任何設(shè)計(jì)決策過程中的一項(xiàng)重要因素,禁用高速緩存并不是一種可行的長(zhǎng)遠(yuǎn)之計(jì)。更好的解決方案是使用 jsp:include 標(biāo)記。
回頁(yè)首
jsp:include 只不過是一個(gè)不同于 include 的偽指令而已。 jsp:include 的優(yōu)點(diǎn)在于:它 總是會(huì)檢查所含文件中的變化。過一會(huì)兒我們將研究這一新標(biāo)記的工作方式。但首先看一下兩種 include 各自的代碼,以便能夠看到二者之間的異同。
清單 2 顯示了一個(gè)簡(jiǎn)單頁(yè)面,它使用了原始的 JSP include 偽指令。
<![CDATA[ <%@ page language="java" contentType="text/html" %> <html> <head> <title>JSP include element test</title> </head> <body> This content is statically in the main JSP file.<br /> <%@ include file="included.html" %> </body> </html> ]]>
清單 3 是同一個(gè)頁(yè)面,只不過這里轉(zhuǎn)成使用 jsp:include 標(biāo)記。
<![CDATA[ <%@ page language="java" contentType="text/html" %> <html> <head> <title>JSP include element test</title> </head> <body> This content is statically in the main JSP file.<br /> <jsp:include page="included.html" flush="true" /> </body> </html> ]]>
您應(yīng)該注意這兩種代碼類型之間的兩大區(qū)別。首先, jsp:include 元素不使用屬于 include 偽指令的 %@ 語(yǔ)法。實(shí)際上, jsp 前綴讓 JSP 編譯器知道:它應(yīng)該尋找標(biāo)準(zhǔn) JSP 標(biāo)記集中的元素。其次,指定要包含的文件的屬性從 file 變成了 page 。如果愿意,可以自己測(cè)試一下新標(biāo)記的結(jié)果。只需更改上一篇文章(請(qǐng)參閱參考資料)中 included.html 文件的內(nèi)容,然后重新裝入瀏覽器頁(yè)面,就會(huì)立即看到新內(nèi)容。
您可能已注意到 jsp:include 代碼示例中的 flush 屬性。顧名思義, flush 指示在讀入包含內(nèi)容之前是否清空任何現(xiàn)有的緩沖區(qū)。JSP 1.1 中需要 flush 屬性,因此,如果代碼中不用它,會(huì)得到一個(gè)錯(cuò)誤。但是,在 JSP 1.2 中, flush 屬性缺省為 false。由于清空大多數(shù)時(shí)候不是一個(gè)重要的問題,因此,我的建議是:對(duì)于 JSP 1.1,將 flush 設(shè)置為 true;而對(duì)于 JSP 1.2 及更高版本,將其設(shè)置為關(guān)閉。
回頁(yè)首
如果您有點(diǎn)愛刨根問底,那么可能十分想知道 jsp:include 標(biāo)記的行為為什么與 include 偽指令不同。道理其實(shí)十分簡(jiǎn)單: jsp:include 包含的是所包含 URI 的 響應(yīng),而不是 URI 本身。這意味著:對(duì)所指出的 URI 進(jìn)行 解釋,因而包含的是 生成的響應(yīng)。如果頁(yè)面是 HTML,那么將得到一點(diǎn)也沒有變化的 HTML。但是,如果是 Perl 腳本、Java servlet 或者 CGI 程序,那么得到的將是從該程序解釋而得的結(jié)果。雖然頁(yè)面通常就是 HTML,但實(shí)際程序恰好是達(dá)到目的的手段。而且,由于每次請(qǐng)求頁(yè)面的時(shí)候都會(huì)進(jìn)行解釋,因此從來不會(huì)象使用 include 偽指令時(shí)那樣高速緩存結(jié)果。雖然這只是很小的變動(dòng),但它卻導(dǎo)致了您所見到的行為中的全部差異。
回頁(yè)首
include 偽指令在某些網(wǎng)站上有其用武之地。例如,如果站點(diǎn)包含一些(如果有變化,也很少)幾乎沒有變化的頁(yè)眉、頁(yè)腳和導(dǎo)航文件,那么基本的 include 偽指令是這些組件的最佳選項(xiàng)。由于 include 偽指令采用了高速緩存,因此只需放入包含文件一次,其內(nèi)容就會(huì)被高速緩存,其結(jié)果會(huì)是極大地提高了站點(diǎn)的性能。
然而,對(duì)于現(xiàn)在許多 Web 應(yīng)用程序或站點(diǎn)而言,地毯式的高速緩存并不能解決問題。雖然頁(yè)眉和頁(yè)腳可能是靜態(tài)的,但是不可能整個(gè)站點(diǎn)都是靜態(tài)的。例如,從數(shù)據(jù)庫(kù)提取導(dǎo)航鏈接是很常見的,并且許多基于 JSP 技術(shù)的站點(diǎn)還從其它站點(diǎn)或應(yīng)用程序上的動(dòng)態(tài) JSP 頁(yè)面提取內(nèi)容。如果正在處理動(dòng)態(tài)內(nèi)容,那么需要采用 jsp:include 來處理該內(nèi)容。
當(dāng)然,最好的解決方案是經(jīng)常把這兩種方法混合搭配使用,將每種構(gòu)造用到最恰當(dāng)?shù)牡胤健G鍐?4 是混合搭配包含解決方案的一個(gè)示例。
<![CDATA[ <%@ page language="java" contentType="text/html" %> <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" %> <jsp:include page="bookshelf.jsp" flush="true" /> <jsp:include page="/mt-blogs/index.jsp" flush="true" /> <%@ include file="/footer.jsp" %> </body> </html> ]]>
上面的代碼顯示了前一篇文章中的示例索引頁(yè)面。導(dǎo)航鏈接和頁(yè)腳是靜態(tài)內(nèi)容,一年最多更改一次。對(duì)于這些文件,我使用了 include 偽指令。內(nèi)容窗格包含 Weblog 和“bookshelf”組件,它們是動(dòng)態(tài)生成的。這兩個(gè)組件需要一直更新,因此對(duì)它們,我使用了 jsp:include 標(biāo)記。 header.jsp 文件有點(diǎn)奇怪。這個(gè)組件是從另一個(gè)本質(zhì)上是靜態(tài)的 JSP 頁(yè)面提取的。但是,正如您將注意到的那樣,它從包含頁(yè)提取頁(yè)“標(biāo)語(yǔ)”,然后將它顯示出來。要處理這一共享信息,我們必須向頁(yè)眉文件傳入?yún)?shù)。而要處理那些參數(shù),就必須使用 jsp:include 元素。
如果您想了解有關(guān)那些參數(shù)的內(nèi)容,請(qǐng)放心,后續(xù)文章不久就將能滿足您的需要。在下一篇文章中,我將解釋 JSP 參數(shù)以及它們是如何與 JavaBeans 組件交互的。屆時(shí),我們網(wǎng)上見。
回頁(yè)首
為了實(shí)踐本系列文章中的練習(xí),您需要與 JSP 兼容的 Web 容器,如Apache Tomcat。
您可能也想研究一下使用符合 JSP 的 IDE。下面有幾個(gè) IDE 可供選擇:jEdit
NetBeans
Eclipse
在本系列中的第一篇文章中了解更多關(guān)于 include 偽指令的內(nèi)容。請(qǐng)參閱完整的 JSP best practices系列 。
我們?cè)谶@里只簡(jiǎn)單地討論了 JSP 在開發(fā)和測(cè)試中的使用,但是“使用 JSP Explorer 快速進(jìn)行 Java 代碼的測(cè)試和文檔的編制”( developerWorks,2001 年 8 月)這篇文章中就這一主題進(jìn)行了十分全面的討論。
要獲得對(duì) JSP 技術(shù)的指導(dǎo)性簡(jiǎn)介,請(qǐng)?jiān)囍鴮W(xué)習(xí) Noel Bergman 的教程“JSP 技術(shù)入門”( developerWorks,2001 年 8 月)。
要了解 JSP 技術(shù)的實(shí)質(zhì),最好的辦法是閱讀JSP 規(guī)范
Hans Bergsten 的JavaServer Pages (O‘Reilly & Associates,2002 年)是學(xué)習(xí) JSP 必不可少的參考資料。
Ten JSP technology books compared”雖略顯過時(shí)( developerWorks,2001 年 6 月),但仍不失為一份對(duì)一些值得一讀的 JSP 書籍所做的優(yōu)秀書評(píng)。
如果您喜歡 JSP 最佳實(shí)踐,那么您可能也想查閱EJB best practices 系列。
JSP 技術(shù)是基于 Java Servlet 技術(shù)。閱讀 Jason Hunter 的Java Servlet Programming (O‘Reilly & Associates,2002 年)以了解更多關(guān)于 Servlet 的知識(shí)。
參閱developerWorksJava 技術(shù)教程頁(yè)面 ,其中完整羅列了 developerWorks 上免費(fèi)的 Java 技術(shù)教程。
您將在developerWorksJava 技術(shù)專區(qū) 中找到關(guān)于 Java 編程各個(gè)方面的數(shù)百篇文章(包括更多關(guān)于 JSP 技術(shù)方面的文章)。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
jsp:include flush標(biāo)簽的含義
JSTL教程
【140325-01】jsp-Servlet 知識(shí)點(diǎn)撿漏
在JSP頁(yè)面中使用OpenCms模版
用shtml來include網(wǎng)頁(yè)文件(開啟SSI)
jsp 靜態(tài)include和動(dòng)態(tài)include
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服