1、html
JSP共有下面兩種include包含語句:tomcat
一、<%@ include file="uri" %>
--靜態的包含頁面:無論其內容如何只是將頁面中的內容包含進來。
--執行過程:將全部內容包含進來一塊兒處理完以後再將全部的內容發送給客戶端。 服務器
二、<jsp:include page="uri">
--動態包含頁面:能自動區分所包含的是靜態頁面仍是動態頁面。
--執行過程:①若是資源爲驚天資源,則直接將資源包含處理,此時的處理過程與<%@ include file="uri" %>包含相同。②若是請求資源爲動態,則先各自處理資源,以後將處理後的結果包含在一塊兒。jsp
2、url
何時用靜態包含?何時用動態包含?spa
include指令<%
@include
file=
""
%>,這種方式的引入屬於靜態導入,include行爲<jsp:include>,這種方式的導入屬於動態的導入,這裏涉及到一個jsp的原理上的問題。如今就先回顧一下:
code
當我在地址欄中輸入一個JSP的地址的時候,點擊回車,會提交一個請求給個人Web容器(如:tomcat,resin)等,這個容器會把這個以jsp結尾的請求對應到一個jsp引擎(其本質也是一個servlet)來處理,這個servlet必定會去先把要回應請求的jsp轉義成爲servlet(此時include指令被解釋執行),而後,把這個servlet編譯爲
class
文件,由虛擬機解釋執行,處理用戶的請求(此時include行爲執行),而後再生成響應。
htm
因此說,靜態導入是在轉譯時發生的,是代碼級的導入,這個指令的做用就是讓jsp引擎去按照這個指令去作一些事情。而include動做是在請求處理階段發生的,也就是說,include動做會產生兩個servlet,二者之間能夠傳參數,引入的是處理後的結果。
對象
一、兩個jsp頁面的<%@page contentType=「text/html;charset=UTF-8」%>應該保持一致資源
二、不能經過fileurl向被包含的jsp頁面傳遞參數,由於此靜態包含是發生在jsp頁面轉換爲servlet的轉換期間,此時的參數是服務器端設置的死的參數,徹底沒有通過客戶端,這種參數是沒有意義的,如<%@include file=「fileurl?user=admin」%>,並且此時會報錯。
三、包含的jsp頁面與被包含的jsp頁面共用一個request內置對象。
好比說在客戶端訪問包含頁面時地址欄後面直接加上參數後傳遞,這種形式的傳參是客戶端送來的,兩個頁面都可以訪問此參數。咱們能夠經過這兩個頁面合成的servlet中能夠看到有傳遞的參數成爲servlet的成員變量。
四、包含的jsp頁面與被包含的jsp頁面最好沒有重複的html標籤。不然會發生覆蓋現象。
1.動態包含用的元素是page,並且有兩種形式。靜態包含用的元素是file,只有一種形式。
2.生成的文件不一樣,靜態的包含是將兩個jsp文件二合一,生成一個以包含頁面命名的servlet和class文件,動態包含的兩個jsp文件各自生成本身的servlet和class文件。
3. 傳參方式一:<jsp:include page=「a.jsp?param=123」/>時被包含的jsp頁面是能夠訪問該參數的。
4. 傳參方式二:
<jsp:include page=「a.jsp」>
<jsp:param name=「」 value=「」>
<jsp:param name=「」 value=「」>
</ jsp:include >
5.在客戶端訪問包含頁面時地址欄後面直接加上參數後傳遞,這種形式的傳參是客戶端送來的,可是這兩個頁面中的request對象不是同一個,由於3.中已經說了包含的頁面能夠向被包含的頁面傳遞參數,因此被包含的頁面中的request對象含的參數個數應該大於等於包含頁面的參數個數的。因此它們各有各的request對象。並且被包含的jsp頁面能夠訪問傳到包含頁面的參數。
6.動態包含只有在執行到它的時候才加載,因此它才叫動態包含。