jsp-靜態包含和動態包含的區別


 

include指令是靜態包含。靜態包含的意思就是:把文件的代碼內容都包含進來,再編譯!

  • include指令是靜態包含,include行為是動態包含。其實include行為就是封裝了request.getRequestDispatcher(String url).include(request,response)

  • include行為語法是這個樣子的

    <jsp:include page=""/>

  • 使用jsp行為來包含文件,jsp源文件是這樣子的:

  • jsp行為包含文件就是先編譯被包含的頁面,再將頁面的結果寫入到包含的頁面中(1.jsp)

  • 動態包含可以向被包含的頁面傳遞參數(用處不大),並且是分別處理包含頁面的(將被包含頁面編譯后得出的結果再寫進包含頁面)【如果有相同名稱的參數,使用靜態包含就會報錯!】

總結

  1. <%@include file="xxx.jsp"%>在翻譯階段(將JSP頁面轉換成servlet的階段),include會讀入指定的頁面中的內容,並將這些內容和原來的頁面融合在一起,融合后的完整頁面再被整體的轉換為一個servlet。這意味着主頁和被引入的頁面共享所有的頁面作用域數據。include指令的一個常見用法是引入應用程序的所有頁面都需要的公共聲明。,而<jsp:include page="xxx.jsp">是jsp中的動作指令,用於在運行時引入另外的資源。被引用頁面改變后,容器可能不會馬上產生反應。這個指令是在請求處理階段而不是在翻譯階段執行的。該行為並不是要引入指定頁面的實際內容,它將引入執行該引入頁面后所產生的應答,這意味着你可以指定任何能夠產生文本應答的web資源。JSP容器將通過一個內部的函數調用來調用指定的資源。因此,這些被引入的資源可以幫助處理原來的請求,所以這些資源可以訪問請求作用域內的所有對象,以及所有的請求參數。但是要注意,它不能訪問任何頁面作用域屬性,或是在主頁面中聲明的腳本變量。
       <c:import>行為和<jsp:include>相同,另外它還可以從外部資源引入數據,比如不同的web應用程序,或者一個FTPfuwq。
        所以應該使用<c:import>來代替<jsp:include>的使用。
        被引用頁面改變后,新版本會立即投入使用。

  2. 使用靜態包含只會產生一個class文件,而使用動態包含會產生多個class文件。<%@ include file%>是把引入的文件和當前的文件共同合斌成一個servlet文件進行解析。<JSP:include page>是把當前文件和引入文件生成兩個不同的servlet文件,在當前文件中在進行動態的調用引入的servlet文件。

  3. 使用靜態包含,包含頁面和被包含頁面的request對象為同一對象,因為靜態包含只是將被包含的頁面的內容復制到包含的頁面中去;而動態包含包含頁面和被包含頁面不是同一個頁面,被包含的頁面的request對象可以取到的參數范圍要相對大些,不僅可以取到傳遞到包含頁面的參數,同樣也能取得在包含頁面向下傳遞的參數

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM