JSP中有兩種包含:
靜態包含:<%@ include file="被包含頁面"%>
動態包含:<jsp:include page="被包含頁面" flush="true">
它們有什么區別,都知道,JSP在WEB服務器中都要轉換成一個java文件,java文件再編譯成一個class文件。當請求JSP頁面的時候,實際上運行的是這個class文件。
從這個方面來說:
靜態包含發生在:JSP---->java文件階段。動態包含發生在:執行class文件階段。動態加入。
靜態包含:只生成一個java文件,動態包含:生成多個class文件。
值得慶幸的是無論是動態包含還是靜態包含,其request對象都是相同的。也就是同一個request對象。
什么都沒例子來的實在:
index.jsp頁面:靜態和動態包含其他頁面。
主要代碼:
靜態包含頁面:
<%@include file="static.jsp" %><br>
動態包含頁面
<jsp:include page="dynamic.jsp" flush="true"/>
static.jsp被靜態包含的頁面。
dynamic被動態包含的頁面。
經過編譯以后生成的效果:
打開index_jsp.java
可以看到被靜態包含的頁面中的內容全部包含在了里面。而被動態包含的頁面使用了:
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "dynamic.jsp", out, true);
而被動態包含的頁面,生成了一個新的java文件。
再看代碼:為什么說動態包含和靜態包含的request是相同的,靜態被包含頁面和包含它的頁面共享request是毋庸置疑的,而動態包含通過上面一行代碼也就一目了然了。其實這些jsp組合的過程是一個請求轉發的過程,自然也使用同一個request對象了。
---------------------