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"/>