include指令與include動作標識的區別
JSP中主要包含三大指令,分別是page,include,taglib。本篇主要提及include指令。
include指令使用格式:<%@ include file=“檔案的絕對路徑或相對路徑”%>
file屬性:指定被包含的檔案,該屬性不支援任何表示式,也不允許通過如下的方式來傳遞引數。
<%@ include file=“welcome.jsp?name=Tom”%>下面用法將會丟擲異常,也是不允許的:
<% String path=“login.jsp”;%>
<%@ include file="<%=path%>"%>
如果該屬性值以”/“開頭,那麼指定的是一個絕對路徑,將在當前應用的根目錄下查詢檔案;如果是以檔名稱或資料夾名開頭,那麼指定的是一個相對路徑,將在當前頁面的目錄下查詢檔案。
JSP中常用的動作標識有jsp:include、jsp:forward、jsp:useBean、jsp:setProperty、jsp:getProperty、jsp:fallback、jsp:pugin。本篇主要提及jsp:include動作標識。
jsp:include動作標識使用格式:<jsp:include page=“被包含檔案的路徑” flush=“true|false”/>
或者向被包含的動態頁面中傳遞引數:
<jsp:include page=“被包含檔案的路徑” flush=“true|false”><jsp:param name=“引數名稱” value=“引數值”/></jsp:include>
page屬性:和include指令的file屬性一樣。
flush屬性:表示當輸出緩衝區滿時,是否清空緩衝區。該屬性值為boolean型別,預設值為false,通常情況下設為true。
處理方式不同:使用include指令,被包含的檔案的內容會原封不動地插入到包含頁中使用該指令地位置,然後JSP編譯器再對這個合成地檔案進行編譯最終編譯成的檔案只有一個。使用include動作標識,該標識被執行時,程式會將請求轉發到(注意是轉發而不是請求重定向)被包含的頁面,並將執行結果輸出到瀏覽器中,然後返回包含頁繼續執行後面的程式碼。伺服器執行的是兩個檔案,JSP編譯器會分別對這兩個檔案進行編譯。注:]請求轉發,儲存在request物件中的資訊會被保留並被帶到目標頁面中;請求重定向,重新生成一個request請求,將該請求重定向到指定的URL,所以事先儲存在request物件中的資訊都不存在了。
包含方式不同:include指令,靜態包含,最終伺服器執行的是將兩個檔案合成後由JSP編譯器編譯成的一個class檔案,若改變被包含的檔案,則主檔案的程式碼就發生了改變,伺服器會重新編譯主檔案。include動作標識,動態包含,通常用來包含那些經常需要改動的檔案。伺服器執行的是兩個檔案,被包含檔案的改動不會影響到主檔案,伺服器不需要對主檔案進行重新編譯,只需要重新編譯被包含的檔案即可,而只有當jsp:include動作標識被執行時,使用該標識時,目標檔案才會被編譯。
約定不同:include指令的約定index.jsp檔案的部分程式碼
1 <%@ page language=“java” contentType=“text/html; charset=UTF-8”%>
2 <%@ include file=“top.jsp” %>
top.jsp檔案的部分程式碼
1 <%@ page language=“java” contentType=“text/html; charset=GB2312”%>
訪問index.jsp將會出現異常
jsp:include動作標識,無需遵循這樣的約定,不會出現異常
1 <%@ page language=“java” contentType=“text/html; charset=GB2312”%>
2 <jsp:include page=“top.jsp”/>
本篇轉載自部落格園使用者:52Hz;