如何在jsp頁面中引用其他頁面?看到這個標題應該很多人好奇這個問題不是簡單嗎,其實小編在這里要說的是jsp的動態引用和靜態引用的補充內容,下面就讓小編為大家介紹如何在jsp頁面中引用其他的頁面的內容吧。
首先先說明下為什么會去討論這個話題。
我在寫自己的博客程序的時候(blogv2.labofjet.com),程序中的目錄是需要讀取數據庫中的數據的,而這個目錄是要被多個頁面引用的。這個時候該怎么辦呢。
我那個時候用的是靜態引用,在jsp頁面中通過<%@include file="menu.jsp"%>引用這個目錄的jsp頁面片段(單獨為目錄做了一個jsp),缺點在于通過不同Controller跳轉到不同的page的時候只要這個page包含目錄的HTML片段,Controller里就需要去調用目錄的dao的方法,然后去給request設置值,這樣才能正常顯示目錄頁面。
后來我想了想,我覺得最好能寫一個servlet,訪問這個servlet的url,就能得到目錄的HTML片段,然后在不同的頁面中,只要加載這個url就相當于加載了目錄的HTML片段。這樣的好處在于不同的controller里不再需要調用目錄的dao了,只要有一個專門的目錄Controller來處理目錄的dao并設置request然后返回目錄的page就行了。然后我就想到了jsp:include。。。。
然后我就百度了一下爛大街的東西。大部分文章都一個意思,jsp:include可以引用jsp,并動態編譯。。blablabla。。??墒撬鼈兌紱]有說明jsp:include可不可以引用servlet呢?我們現在不會去把邏輯放到jsp中的,一般都是放到servlet中然后再跳轉到jsp中吧。經過試驗我發現是可以的。但是有一些地方比較坑爹。。。。。需要注意。。。
jsp:include引用jsp的時候完全OK,就是網上大部分文章介紹的內容。
jsp:include引用servlet的時候,這個servlet需要在web.xml里配置過,不然eclipse會給紅色波浪線。
不知道大家看了上面的總結有沒有產生一個新的問題:現在我們寫程序的時候都用一些框架,比如SpringMVC,我們沒有在web.xml為每個Servlet單獨配置,而是通過SpringMVC自己的配置文件去配置這些Controller(Servlet)的。那么jsp:include還能用嗎?
答案是可以的。。。。但是很坑。。。坑就坑在eclipse里還是會劃紅線,eclipse覺得找不到這個url對應的servlet,但是實際上是可以訪問的。
另外還有個小問題,可能是我自己沒設置對,我每次jsp:include的時候console里都會報java.io.IOException: Stream closed這個異常,我覺得可能是引用其他servlet的時候其他的servlet自動調用了out的close方法,導致包含其他page的page的內容不能被正常輸出。。。。這個問題我沒繼續研究下去。。。。我想肯定是有解決辦法的,但是不是我這篇文章要討論的重點。
這么說的話現在就有2個小問題了:一個異常,一個eclipse的紅線報錯。。。雖然也能用,但是讓人很不爽。。
所以就找一個替代方法吧。。那就是jstl的c:import
這個標簽其實超級簡單的。。。比如我把目錄HTML片段對應的url設置成了/menu,那我在包含目錄的頁面中只要
<c:import var="data" url="/menu" />${data}
就OK了。目錄就被包含到其他頁面中了。。是不是超級簡單呀!
以上這如何在jsp頁面中引用其他的頁面的內容,希望能給大家一個參考,也希望大家多多支持錯新技術頻道。
新聞熱點
疑難解答