天天看點

<%@include指令元素和<jsp:include行為元素的差別

首先了解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行為元素