JSP指令include和JSP動做元素include的區別

include指令用於在JSP頁面靜態的包含一個文件,該文件能夠是JSP頁面、HTML頁面、文本文件或者一段java代碼。使用include指令的JSP頁面在轉換時,JSP容器會在其中插入所包含文件的文本或代碼。html

include指令語法格式:java

  <%@ include file="relativeURL"%>jsp

XML格式的include指令格式:url

  <jsp:directive.include file="relativeURL">spa

其中file屬性爲相對於當前JSP文件的URL。htm

例:對象

welcome.jsp文件接口

<%@ page contentType="text/html;charset=gb2312" %>資源

<html>get

  <head><title>welcome</title></head>

  <body>

    the now time is:

    <%@  include file="data.jsp"%>

  </body>

</html>

data.jsp

<%

  out.println(new java.util.Date().toLocaleString());

%>

注意:在被包含的文件中最好不要使用<html>/</html><body></body>等標籤,由於這會影響到原JSP文件中一樣的標籤,有時會致使錯誤。

另外,由於原文件和被包含文件能夠互相訪問彼此定義的變量和方法,因此在包含文件時要格外當心,避免在被包含文件中定義同名的變量和方法,從而致使的轉換出錯。或者修改了另外文件中變量的值而致使的錯誤。


 

<jsp:include>動做標識

這個動做元素用於在當前頁面中包含靜態和動態的資源,一旦被包含的頁面執行完畢,請求處理將在調用頁面中繼續進行。被包含的頁面不能改變響應的狀態代碼或者設置報頭,這防止了對相似setCookie()這樣的方法的調用,任何對這些方法的調用都將被忽略。這個約束和在javax.servlet.Request.Dispatcher類的include()方法上所施加的約束是同樣的。

<jsp:include>動做的語法:

  <jsp:include page="url" flush="true/false">

或者

  <jsp:include page="url" flush="true/false">

    {<jsp:param...../>}

  </jsp:include>

<jsp:include>有兩個屬性:page和flush

page:指定被包含資源的相對路徑,該路徑是相對於當前JSP頁面的URL

flush:該屬性是可選的,如爲true,則表示當頁面輸出使用了緩衝區,那麼在進行包含工做以前,先刷新緩衝區。如設置爲false,則不會刷新緩衝區。默認是false。

<jsp:include>動做元素能夠在他的內容中包含一個或者多個<jsp:param>元素,爲包含的頁面提供參數信息。被包含的頁面能夠訪問request對象,該對象包含了原始的參數和使用<jsp:param>元素指定的新參數,若是參數的名稱相同,則原來的值不變,新的值其優先級比已經存在的值要高。

例如:請求對象中有一個參數爲param=value1,而後在<jsp:param>元素指定了一個參數param=value2,在被包含的頁面中,接收到的參數爲param=value2,value1,調用javax.servlet.ServletRequest接口中的getParameter()方法將返回value2,固然能夠使用getParameterValues()返回指定參數的全部值。

表1-1<jsp:include>和include指令的區別
語法 相對路徑 發生時間 包含對象 描述
<%@ include file="url"%> 相對於當前文件 轉換期間 靜態 包含的內容被JSP容器分析
<jsp:include page="url"> 相對於當前頁面 請求處理期間 靜態和動態 包含的內容不進行分析,但在相應的位置被包含

注意:表1-1中include指令包含的對象爲靜態,並非指include指令只能包含像HTML這樣的靜態頁面,include指令也能夠包含JSP頁面。所謂靜態和動態指的是:include指令將JSP頁面做爲靜態對象,將頁面的內容(文本或代碼)在include指令的位置處包含進來,這個過程發生在JSP頁面的轉換期間。而<jsp:include>動做吧包含的JSP頁面做爲動態對象,在請求處理期間,發送請求給該對象,而後在當前頁面對請求的響應中包含該對象對請求處理的結果。這個過程發生在執行階段(即請求處理階段)。

  當採用include指令包含資源時,相對路徑的解析在轉換期間發生(相對於當前文件的路徑來找到資源),資源的內容(文本或者代碼)在include指令的位置被包含進來,成爲一個總體,被轉換爲Servlet源文件。當採用<jsp:include >動做包含資源時,相對路徑的解析在請求處理階段,(相對於當前頁面來找到資源),當前頁面和被包含的資源是兩個獨立的個體,當前頁面將請求發送給被包含的資源,被包含的資源對請求處理的結果做爲當前頁面對請求響應的一部分發送給客戶端。

  爲了更好的理解include指令和<jsp:include>動做包含資源的相對路徑,弄清楚相對於當前文件和相對於當前頁面的區別,給出了表1-2,在這個例子中用到四個文件:

a.jsp  c.jsp  abc/b.jsp   abc/c.jsp

表1-2
a.jsp abc/b.jsp 結果
<%@ include file="abc/b.jsp"%> <%@ include file="c.jsp"%> abc/c.jsp
<jsp:include page="abc/b.jsp"> <jsp:include page="c.jsp"> abc/c.jsp
<jsp:include page="abc/b.jsp"> <%@ include file="c.jsp"%> abc/c.jsp
<%@ include file="abc/b.jsp"%> <jsp:include page="c.jsp"> c.jsp
相關文章