兩種方式
JSP include 檔案有兩種方式:
1. 使用include 標籤,像
<%@ include file="include.jsp" %>
2. 使用jsp:include 標籤,像
<jsp:include page="include.jsp" flush="true">
<jsp:param name="age" value="32" />
</jsp:include>
使用的差異在於:
方式1 比較適合引入一些靜態,比較少改動的內容;比如網頁的header 和 footer 的部分。
方式2 比較適合於引入改動較多的頁面。
執行個體兩個jsp: main.jsp 和 include.jsp
include.jsp 的內容都是一樣:
<!-- include.jsp by oscar999--><%@ page contentType="text/html;charset=UTF-8" %><%@ page language="java" import="java.util.*" %> ===begin include jsp=== <p>Include JSP: </p> <p>CurDate <%=new Date()%></p> <% String str = request.getParameter("age");%>age:<%=str%> <br>===end include jsp===
main.jsp 匯入方式不同:
方式1:
<!-- main.jsp by oscar999--><%@ page contentType="text/html;charset=UTF-8" %><html> <body> <div> ===begin main jsp=== <p> Main JSP request: </p> ===end main jsp=== </div> <%@ include file="include.jsp" %> </body> </html>
方式二:
<!-- main.jsp by oscar999--><%@ page contentType="text/html;charset=UTF-8" %><html> <body> <div> ===begin main jsp=== <p> Main JSP request: </p> ===end main jsp=== </div> <jsp:include page="include.jsp" flush="true"> <jsp:param name="age" value="32" /> </jsp:include> </body> </html>
差別的實質
JSP啟動並執行實質是最終都會被web server 轉成servlet 來執行。
tomcat 轉化的.java 檔案位於work/Catalina/local 的相關目錄下。
比較一下兩者的差別:
方式1產生後的Java的include部分:
out.write("===begin include jsp=== \r\n"); out.write("<p>Include JSP: </p> \r\n"); String str = request.getParameter("age"); out.write("\r\n"); out.write("age:\r\n"); out.print(str); out.write(" <br>\r\n"); out.write("\r\n"); out.write("===end include jsp=== ");
而方式2如下:
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "include.jsp" + (("include.jsp").indexOf('?')>0? '&': '?') + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("age", request.getCharacterEncoding())+ "=" + org.apache.jasper.runtime.JspRuntimeLibrary.URLEncode("32", request.getCharacterEncoding()), out, true);
可以看出方式1是直接輸出,而方式二就是需要進行解釋。
補充
開發的時候可能會給include的jsp 起一個比較容易區分的尾碼名, 比如 .incjsp;
使用方式2 匯入的話,使用Chrome 和Firefox 瀏覽器會有問題。會把include.incjsp 的源碼檔案輸出,而不是產生後的html