1. 程式人生 > >轉:JSP之include動態包含與靜態包含

轉:JSP之include動態包含與靜態包含

動態 常用 bsp 程序 ima 頁面 img 而是 我們

原文地址:http://www.cnblogs.com/ygj0930/p/6044676.html 

 JSP中,include是一個經常用到的標簽。當應用程序中所有的頁面的某些部分(如標題、頁腳和導航欄)都相同的時候,我們就可以考慮用include。但是相同的部分有靜態的(裝載進頁面顯示後再也不變的),有動態的(裝載進頁面後還會改變,如:隨時間改變、隨用戶行為改變等)。那麽,對這兩種類型的內容的包含方式一樣嗎?當然不一樣。

  一、靜態包含:<%@ include file=”包含頁面”%>

  靜態包含一般用於加載進頁面顯示後就再也不變的東西,比如頁眉、背景、標題等等。靜態包含不會檢查所含文件的變化,把文件包含進來後,被包含文件的修改變化是不會影響已被包含進來的內容的。因為,靜態包含發生在編譯階段

。比如:a.jsp中使用了語句 <%@ include file="b.jsp"%>,把b.jsp包含了進來,那麽在編譯a.jsp文件時,會直接把b.jsp文件的內容全部內嵌到a.jsp文件中包含b的語句的位置。然後運行a,顯示a頁面。也就是說,靜態include是先把被包含文件的內容全部復制內嵌到包含文件中,再進行編譯運行的。也正是因為要把b包含進a,所以b中的變量等不能與a重復,否則會報錯。

技術分享圖片

  二、動態包含:<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動態包含與靜態包含