一、靜態包含指令<%@include file=“fileurl”%>
- 兩個jsp頁面的<%@page contentType=“text/html;charset=gbk”%>應該保持一致
- 不能通過fileurl向被包含的jsp頁面傳遞參數,因為此靜態包含是發生在jsp頁面轉換為servlet的轉換期間,此時的參數是服務器端設置的死的參數,完全沒有經過客戶端,這種參數是沒有意義的,如<%@include file=“fileurl?user=admin”%>,而且此時會報錯。
- 包含的jsp頁面與被包含的jsp頁面共用一個request內置對象。
- 比如說在客戶端訪問包含頁面時地址欄后面直接加上參數后傳遞,這種形式的傳參是客戶端送來的,兩個頁面都能夠訪問此參數。我們可以通過這兩個頁面合成的servlet中可以看到有傳遞的參數成為servlet的成員變量。
- 包含的jsp頁面與被包含的jsp頁面最好沒有重復的html標簽。否則會發生覆蓋現象。
二、動態包含<jsp :include page=“a.jsp”/>與靜態包含<%@include file=“fileurl”%>的區別
- 動態包含用的元素是page,而且有兩種形式。靜態包含用的是file,只有一種形式。
- 生成的文件不同,靜態的包含是將兩個jsp文件二合一,生成一個以包含頁面命名的servlet和class文件,動態包含的兩個jsp文件各自生成自己的servlet和class文件。
- 傳參方式一:<jsp:include page=“a.jsp?param=123”/>時被包含的jsp頁面是可以訪問該參數的。
- 傳參方式二:
<jsp:include page=“a.jsp”>
<jsp:param name=“” value=“”>
<jsp:param name=“” value=“”>
</ jsp:include >
5. 在客戶端訪問包含頁面時地址欄后面直接加上參數后傳遞,這種形式的傳參是客戶端送來的,但是這兩個頁面的request對象不是同一個,因為3中已經說了包含的頁面可以向被包含的頁面傳遞參數,所以被包含的request對象含的參數個數應該大於等於包含頁面的參數個數的。所以它們各有各的request對象。而且被包含的jsp頁面可以訪問傳到包含頁面的參數。
6. 動態包含只有在執行到它的時候才加載,所以它才叫動態包含。
另一種簡答說法:
- 動態INCLUDE用jsp:include動作實現<jsp:include page = included.jsp flush = "true">它總會檢查所含文件中的變化,適用於動態頁面並且可以帶參數。
- 靜態INCLUDE用include偽碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面<%@include file=included.html%>