首先了解JSP 的執行過程:
(1) 用戶端發出Request (請求);
(2) JSP Container 将JSP轉譯成Servlet的源代碼;
(3) 将産生的Servlet 的源代碼經過編譯後,并加載到記憶體執行;
(4) 把結果Response (響應)至用戶端。
在執行 JSP 網頁時,通常可分為兩個時期:轉譯時期(Translation Time)和請求時期(Request Time)
轉譯時期:JSP網頁轉譯成Servlet類。
請求時期:Servlet類執行後,響應結果至用戶端。
注:轉譯期間主要做了兩件事情:将JSP網頁轉譯為 Servlet 源代碼(.java),此段稱為轉譯時期(Translation time);将Servlet源代碼(.java)編譯成 Servlet 類(.class),此段稱為編譯時期(Compilation time)。
現在簡單的說說它們的差別:
<%@include file=""%>指令發生在轉譯時期,主jsp頁面是把被包含的jsp的内容合成一個檔案後被jsp容器将它轉化成servlet。可以看到在tomcat中這時隻産生一個臨時class檔案和一個java檔案.
<jsp:include page=” ” flush=”true”/> 行為發生在請求時期,是在jsp轉譯成servlet以後,是以會在tomcat找到被包含的jsp的.java和.class檔案(當然主jsp的也有),也就是主jsp引用了被包含的jsp轉化并被編譯後産生的servlet類檔案,
或者說被包含的jsp檔案作為一個單獨的檔案在執行後才被主jsp檔案運作時調用的。
另外<%@include 僞指令采用了高速緩存,是以隻需放入包含檔案一次,其内容就會被高速緩存,其結果會是極大地提高了站點的性能,是以一般被包含的檔案是靜态的用<%@include指令元素,而動态的檔案用<jsp:include行為元素