<%@include...> 與<jsp:include....>指令的區別
include指令:
在翻譯階段(將JSP頁面轉換成servlet的階段),include會讀入指定的頁面中的內容,並將這些內容和原來的頁面融合在一起
<%@ include file=”header.html”%>
引入的頁面可以只包含靜態內容(例如HTML),也可以是一個普通的JSP頁面。主頁面和引入的頁面融和在一起(引入的頁面只是最為普通的文本進行融合,並不對動態內容求值),融合后的完整頁面再被整體的轉換為一個servlet。
這意味着主頁和被引入的頁面共享所有的頁面作用域數據。因此,如果主頁面中聲明了一個變量,而在某個被引入的頁面中也聲明了一個同名的變量,那么在翻譯階段將會造成一個錯誤,因為組合后的頁面無法進行編譯。
include指令的一個常見用法是引入應用程序的所有頁面都需要的公共聲明。
JSP規范建議在使用include指令引入JSP頁面時,最好使用不同的文件擴展名,因為它們一般都不是完整而合法的頁面,如:可以使用這些替代的文件擴展名:.jspf或 .jsf。
被引用頁面改變后,容器可能不會馬上產生反應。
<jsp:include>
指令用於在運行時引入另外的資源。
<jsp:include page=”navigation.jsp”/>
這個指令是在請求處理階段而不是在翻譯階段執行的。該行為並不是要引入指定頁面的實際內容,它將引入執行該引入頁面后所產生的應答,這意味着你可以指定任何能夠產生文本應答的web資源。JSP容器將通過一個內部的函數調用來調用指定的資源。因此,這些被引入的資源可以幫助處理原來的請求,所以這些資源可以訪問請求作用域內的所有對象,以及所有的請求參數。但是要注意,它不能訪問任何頁面作用域屬性,或是在主頁面中聲明的腳本變量。
<c:import>行為和<jsp:include>相同,另外它還可以從外部資源引入數據,比如不同的web應用程序,或者一個FTPfuwq。
所以應該使用<c:import>來代替<jsp:include>的使用。
被引用頁面改變后,新版本會立即投入使用。
include 和<jsp:include>行為直接的區別
語法 | 執行時間 | 引入內容 |
<%@ include File=”relativeURI”%> | 翻譯階段 | 靜態文本(HTML、JSP),在JSP頁面被轉換為servlet之前和他融合在一起 |
<jsp:include Page=”relativeURI”Flush=”true/false”/> | 請求處理階段 | 執行頁面或servlet所生成的應答文本 |
總結:<%@ include file%>是把引入的文件和當前的文件共同合斌成一個servlet文件進行解析。<JSP:include page>是把當前文件和引入文件生成兩個不同的servlet文件,在當前文件中在進行動態的調用引入的servlet文件。