JSP入門:include指令與jsp:include動作標誌

初學JSP時碰到兩個看似沒有什麼差別include指令與jsp:include動作標誌。

這兩個指令看上去沒什麼不同,但其實是存在很大差別的。

我在初學時新建了一個web項目,並創建了三個jsp頁面top.jsp,center.jsp,bottom.jsp.

通過<include file="top.jsp">和<include file="bottom.jsp">在center.jsp中引用

結果在編譯的時候報錯,不能保存。

而使用<jsp:include oage="top.jsp"/>.....則沒有問題。

查閱了《Java Web從入門到精通》,找到了答案:

1.include指令通過file屬性指定被包含的文件,並且file屬性不支持任何表達式;<jsp:include>動作標誌通過page屬性置頂被包含的文件,而且page屬性支持JSP表達式。

2.使用include指令時,被包含的文件內容會原封不動地插入到包含頁中,然後JSP編譯器再將合成後的文件最終編譯成一個Java文件;使用<jsp:include>動作標誌包含文件時,當標誌被執行時,程序將會請求轉發(注意是轉發,而不是請求重定向)到被包含的頁面,並將執行結果輸出到瀏覽器中,然後返回包含頁繼續執行後面的代碼。因爲服務器執行的是多個文件,所以JSP編譯器會分別對這些文件進行編譯。

3.在應用include指令包含文件時,由於被包含的文件最終會生成一個文件,所以被包含文件、包含文件中不能有重名的變量或者方法;而在應用<jsp:include>動作標誌包含文件時,由於每個文件都是單獨編譯的,所以在被包含文件中重名的變量和方法都是不相沖突的。


也就是說。include指令實際上是把我所創建的三個頁面的代碼都給拼到了一起。實際上就會重複 這樣能不報錯麼?

而使用jsp:include相當於<frame src>,並非強制性的拼湊,而是各幹各的,互不影響。所以才能運轉正常。

對於有強迫症的朋友,這裏提供使用include指令的解決方法。就是把jsp頁面<html>標籤前面的兩個地方代碼給刪掉

1:

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

2:
    <base href="<%=basePath%>">



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章