初看這個(gè)標(biāo)題....大家的感覺一定是好2啊.....博主一定要說(shuō)jsp的動(dòng)態(tài)引用(jsp:include)和靜態(tài)引用(@include)了。介紹這兩者區(qū)別的文章已經(jīng)爛大街了。。一搜一大把。。博主竟然還來(lái)介紹這些老古董。。果斷alt+F4。。。
如果你確實(shí)是這么想的。。。那請(qǐng)先別急著關(guān)閉頁(yè)面。。。今天我來(lái)分享一下自己的理解,算是對(duì)爛大街的東西的一點(diǎn)補(bǔ)充吧。。。(后面文字會(huì)比較啰嗦)
首先先說(shuō)明下為什么會(huì)去討論這個(gè)話題。
我在寫自己的博客程序的時(shí)候(blogv2.labofjet.com),程序中的目錄是需要讀取數(shù)據(jù)庫(kù)中的數(shù)據(jù)的,而這個(gè)目錄是要被多個(gè)頁(yè)面引用的。這個(gè)時(shí)候該怎么辦呢。
我那個(gè)時(shí)候用的是靜態(tài)引用,在jsp頁(yè)面中通過%@include file="menu.jsp"%>引用這個(gè)目錄的jsp頁(yè)面片段(單獨(dú)為目錄做了一個(gè)jsp),缺點(diǎn)在于通過不同Controller跳轉(zhuǎn)到不同的page的時(shí)候只要這個(gè)page包含目錄的HTML片段,Controller里就需要去調(diào)用目錄的dao的方法,然后去給request設(shè)置值,這樣才能正常顯示目錄頁(yè)面。
后來(lái)我想了想,我覺得最好能寫一個(gè)servlet,訪問這個(gè)servlet的url,就能得到目錄的HTML片段,然后在不同的頁(yè)面中,只要加載這個(gè)url就相當(dāng)于加載了目錄的HTML片段。這樣的好處在于不同的controller里不再需要調(diào)用目錄的dao了,只要有一個(gè)專門的目錄Controller來(lái)處理目錄的dao并設(shè)置request然后返回目錄的page就行了。然后我就想到了jsp:include。。。。
然后我就百度了一下爛大街的東西。大部分文章都一個(gè)意思,jsp:include可以引用jsp,并動(dòng)態(tài)編譯。。blablabla。。。可是它們都沒有說(shuō)明jsp:include可不可以引用servlet呢?我們現(xiàn)在不會(huì)去把邏輯放到j(luò)sp中的,一般都是放到servlet中然后再跳轉(zhuǎn)到j(luò)sp中吧。經(jīng)過試驗(yàn)我發(fā)現(xiàn)是可以的。但是有一些地方比較坑爹。。。。。需要注意。。。
jsp:include引用jsp的時(shí)候完全OK,就是網(wǎng)上大部分文章介紹的內(nèi)容。
jsp:include引用servlet的時(shí)候,這個(gè)servlet需要在web.xml里配置過,不然eclipse會(huì)給紅色波浪線。
不知道大家看了上面的總結(jié)有沒有產(chǎn)生一個(gè)新的問題:現(xiàn)在我們寫程序的時(shí)候都用一些框架,比如SpringMVC,我們沒有在web.xml為每個(gè)Servlet單獨(dú)配置,而是通過SpringMVC自己的配置文件去配置這些Controller(Servlet)的。那么jsp:include還能用嗎?
答案是可以的。。。。但是很坑。。??泳涂釉趀clipse里還是會(huì)劃紅線,eclipse覺得找不到這個(gè)url對(duì)應(yīng)的servlet,但是實(shí)際上是可以訪問的。
另外還有個(gè)小問題,可能是我自己沒設(shè)置對(duì),我每次jsp:include的時(shí)候console里都會(huì)報(bào)java.io.IOException: Stream closed這個(gè)異常,我覺得可能是引用其他servlet的時(shí)候其他的servlet自動(dòng)調(diào)用了out的close方法,導(dǎo)致包含其他page的page的內(nèi)容不能被正常輸出。。。。這個(gè)問題我沒繼續(xù)研究下去。。。。我想肯定是有解決辦法的,但是不是我這篇文章要討論的重點(diǎn)。
這么說(shuō)的話現(xiàn)在就有2個(gè)小問題了:一個(gè)異常,一個(gè)eclipse的紅線報(bào)錯(cuò)。。。雖然也能用,但是讓人很不爽。。
所以就找一個(gè)替代方法吧。。那就是jstl的c:import
這個(gè)標(biāo)簽其實(shí)超級(jí)簡(jiǎn)單的。。。比如我把目錄HTML片段對(duì)應(yīng)的url設(shè)置成了/menu,那我在包含目錄的頁(yè)面中只要
c:import var="data" url="/menu" />
${data}
就OK了。目錄就被包含到其他頁(yè)面中了。。是不是超級(jí)簡(jiǎn)單呀!
以上這篇jsp頁(yè)面中引用其他頁(yè)面的簡(jiǎn)單方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:- jsp中一個(gè)頁(yè)面引入另一個(gè)頁(yè)面的實(shí)現(xiàn)代碼