第一種:include指令
include指令:當JSP轉換成Servlet時引入指定文件(指令元素),這是一種靜態包含,它運行的時候不會單獨編譯成.class文件,它生成一個新的整體.class文件。
<%@ include file="head.jsp"%> <%@ include file="body.jsp"%> <%@ include file="tail.jsp"%>
注意:兩個文件合成一起編譯的話這個兩個文件中不能包含相同名字的變量!
讓我們來look一下:



第二種<jsp:include>動作元素
<jsp:include>動作元素:當JSP頁面被請求時引入指定文件,它是動態包含一個外部文件,運行后代碼時是分別編譯成單獨的.class文件。
元素允許你包含動態文件和靜態,這兩種包含文件的結果是不同的。如果文件僅是靜態文件,那么這種包含僅僅是把包含文件的內容加到jsp文件中去,而如果這個文件動態的,那么這個被包含文件也會被Jsp編譯器執行。
<jsp:include page="head.jsp"/> <jsp:include page="body.jsp"/> <jsp:include page="tail.jsp"/>
第二種方法可以很方便的用<jsp:param>來向所包含頁傳遞參數,方法如下:
<jsp:include page="head.jsp"/> <jsp:include page="body.jsp"> <jsp:param name="uid" value="username"/> <jsp:param name="pwd" value="password"/> </jsp:include> <jsp:include page="tail.jsp"/>
第二種方式因為是兩個jsp文件單獨編譯的所以可以有相同的變量名。


JSP中的include的兩種用法
1.兩種用法
<%@inlcude file =”header.jsp”%/>
此時引入的是靜態的jsp文件,它將引入的jsp中的源代碼原封不動地附加到當前文件中,所以在jsp程序中使用這個指令的時候file里面的值(即要導入的文件)不能帶多余的標簽或是與當前jsp文件重復的東西。例如里面不要包含<html><body>這樣的標簽,因為是把源代碼原封不動的附加過來,所以會與當前的jsp中的這樣的標簽重復導致出錯。<jsp:include page=”/user/test” flush=”true”/>
此時引入執行頁面或生成的應答文本.jsp:include標簽導入一個重用文件的時候,這個文件是經過編譯的,通俗點說就是附加這個要導入文件經過編譯后的效果,所以可以含有與當前jsp程序中重復的內容,因為在附加過來之前就會被解析掉。其中flush 表示在讀入包含內容之前是否清空任何現有的緩沖區。
2.include頁面攜帶入參
<jsp:include page=”/user/param” flush=”true”>
<jsp: param name=”userID” value=”2”/>
<jsp:include>
3.兩種用法的區別
| 區別 |
include |
jsp:include |
| 執行時間 |
翻譯階段 |
在請求處理階段執行 |
| 引入的內容 |
引入靜態文本,先包含,后編譯 | 引入執行頁面或servlet所生成的應答文本. 被包含的文件先編譯,后包含進來,然后顯示 |
翻譯階段:
jsp頁面不能原封不動地被傳送給瀏覽器,全部的jsp元素都必須首先由服務器進行處理。這是通過將jsp頁面轉達化成servlet,然后執行這個servlet來結束的。服務器需要一個jsp容器來處理jsp頁面。jsp容器平常以servlet的形式來實現,這個servlet經過配置,可以處理對jsp頁面的全部請求。
Jsp容器同時將jsp頁面轉化成servlet(稱為jsp頁面實現類—JSP Page implementation class),並編譯這個servlet。這兩步就組成了翻譯階段.
請求處理階段:
Jsp容器除了上面提到的同時將jsp頁面轉化成servlet外,還同時調用jsp頁面實現類以處理每個請求並產生應答.這個階段我們就稱為請求處理階段.請求處理階段僅執行類文檔.
本博文參考的文章
jsp包含文件的兩種方法
JSP中包含外部文件的兩種方式詳解
jsp的include兩種使用方法
列出Jsp中包含外部文件的方式,兩者有何區別。
