|
原文:https://www.ibm.com/developerworks/cn/java/j-jsp04293/
JSP
include 偽指令的不足之處有一個(gè)是:它會(huì)導(dǎo)致 Web
瀏覽器高速緩存所有頁(yè)面。在處理諸如頁(yè)腳、版權(quán)聲明或一組靜態(tài)鏈接之類(lèi)的靜態(tài)組件時(shí),這是有意義的。這些文件不會(huì)改變,因此沒(méi)有理由讓 JSP
解釋器不斷地重新輪詢(xún)其中的數(shù)據(jù)。凡是可能的地方,都應(yīng)該實(shí)現(xiàn)高速緩存,因?yàn)樗纳屏藨?yīng)用程序的性能。
但是,有時(shí)侯,進(jìn)行高速緩存會(huì)得不償失。如果提入的內(nèi)容來(lá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è)試和開(kāi)發(fā)周期(請(qǐng)參閱側(cè)欄“
JSP 測(cè)試和開(kāi)發(fā)”)中,在瀏覽器中禁用高速緩存通常能夠解決這一問(wèn)題。但是,對(duì)于實(shí)際使用的應(yīng)用程序而言,性能是任何設(shè)計(jì)決策過(guò)程中的一項(xiàng)重要因素,禁用高速緩存并不是一種可行的長(zhǎng)遠(yuǎn)之計(jì)。更好的解決方案是使用
jsp:include 標(biāo)記。
如果您有點(diǎn)愛(ài)刨根問(wè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)也沒(méi)有變化的 HTML。但是,如果是 Perl 腳本、Java
servlet 或者 CGI 程序,那么得到的將是從該程序解釋而得的結(jié)果。雖然頁(yè)面通常就是
HTML,但實(shí)際程序恰好是達(dá)到目的的手段。而且,由于每次請(qǐng)求頁(yè)面的時(shí)候都會(huì)進(jìn)行解釋?zhuān)虼藦膩?lái)不會(huì)象使用
include 偽指令時(shí)那樣高速緩存結(jié)果。雖然這只是很小的變動(dòng),但它卻導(dǎo)致了您所見(jiàn)到的行為中的全部差異。
|