轉:JSP之include動態包含與靜態包含
原文地址:http://www.cnblogs.com/ygj0930/p/6044676.html
JSP中,include是一個經常用到的標簽。當應用程序中所有的頁面的某些部分(如標題、頁腳和導航欄)都相同的時候,我們就可以考慮用include。但是相同的部分有靜態的(裝載進頁面顯示後再也不變的),有動態的(裝載進頁面後還會改變,如:隨時間改變、隨用戶行為改變等)。那麽,對這兩種類型的內容的包含方式一樣嗎?當然不一樣。
一、靜態包含:<%@ include file=”包含頁面”%>
靜態包含一般用於加載進頁面顯示後就再也不變的東西,比如頁眉、背景、標題等等。靜態包含不會檢查所含文件的變化,把文件包含進來後,被包含文件的修改變化是不會影響已被包含進來的內容的。因為,靜態包含發生在編譯階段
二、動態包含:<jsp:include page=" " flush="true"/>
動態包含用於加載經常變化的、要求顯示最新版本內容的東西,比如提交時間戳:用戶打開博客編輯頁面時,有一個時間加載進來了。用戶編寫完博客,點擊提交時,就應該使用/顯示提交瞬間的時間而不是打開編輯頁面時的那個時間。所以這裏要用的就是最新時間。由上面我們知道,靜態include是先包含進來,再編譯,運行並傳回瀏覽器顯示的,所以不能滿足我們要求某些部分使用最新內容的要求。那麽,我們就要用到動態include。
動態include與靜態include的最大不同在於:包含文件與被包含文件都是先編譯執行,再包含。二者的編譯階段是相互獨立的,只有在包含文件的include語句處把被包含文件的執行結果包含進來。換言之,包含文件先編譯,執行。執行到了include語句的時候才觸發被包含文件的編譯、執行,並實時把結果包含進來。從而達到獲取最新的被包含內容的目的。同樣使用a.jsp包含b.jsp的例子:加入a.jsp中動態include了b.jsp。現在,a先編譯成servlet類文件,然後運行,當運行到包含b的語句處,引起b的編譯,運行,並把b的運行servlet運行結果包含進a。最後a順利運行完畢,把a的servlet類運行結果輸出到瀏覽器顯示。
綜上所述,我們可以一句話辨析靜態include與動態include的區別:靜態include是編譯階段的代碼拼接,動態include是編譯後的servlet的運行結果的拼接。
三、混合搭配的使用方案
通過上面兩點,我們知道了一個網頁可以通過靜態包含、動態包含兩種方式來使用來自外部的內容。而在我們實際應用中,很少說一個頁面只用靜態包含或只用動態包含的。而是根基實際情況,對頁眉頁腳、導航欄之類的靜態內容我們就用靜態包含,對數據庫實時查詢、時間戳等動態內容我們就用動態包含。具體情況,具體使用,動靜結合,靈活搭配。
轉:JSP之include動態包含與靜態包含