初看這個標題....大家的感覺一定是好2啊.....博主一定要說jsp的動態引用(jsp:include)和靜態引用(@include)了。介紹這兩者區別的文章已經爛大街了。。一搜一大把。。博主竟然還來介紹這些老古董。。果斷alt+F4。。。
如果你確實是這么想的。。。那請先別急著關閉頁面。。。今天我來分享一下自己的理解,算是對爛大街的東西的一點補充吧。。。(后面文字會比較啰嗦)
首先先說明下為什么會去討論這個話題。
我在寫自己的博客程序的時候(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頁面中引用其他頁面的簡單方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。