JSP請求
- JSP使用
<jsp:forward page="URL" />
標籤來轉發請求 - 轉發的目標組件可以是
HTML
、JSP
、Servlet
- 轉發點和Servlet一樣,所有源組件的響應正文都不會被髮送給瀏覽器,共享
HttpServletRequest
、HttpServletResponse
對象 Servle
t中,HttpServletResponse
對象的sendRedirect(String location)
方法進行請求轉發之後的代碼也會執行,但是在JSP
中,轉發標籤之後的代碼不會被執行在標籤
<jsp:forward page="URL" />
之間可以加一個或多個<jsp:para 屬性="值"/>
來向轉發的目標組件傳遞參數<jsp:forward page="/hello.jsp"> <jsp:param name="username" value="Tom" /> <jps:param name="password" value="12345" /> </jsp:forward>
在目標組件中可以通過request.getParameter(“username”)和request.getParameter(“password”)來分別獲取值
Tom
和12345
JSP包含
JSP可以使用
<jsp:include page="URL" />
標籤和include
指令來包含其他文件標籤包含語法
<jsp:include page="URL" />
指令包含的語法
<%@ include file="URL"%>
include
指令用於靜態包含,<jsp:include>
標籤用於動態包含,無論是靜態包含還是動態包含,都共享請求範圍內的數據- 靜態包含和動態包含
- 靜態包含
- 服務器在解析一個包含另一個JSP文件的JSP文件時,解析到
include
指令,就把這個指令指定的文件的整個內容完全包含到當前JSP文件中,然後在把整個JSP翻譯爲一個Servlet,編譯,運行 - 由於靜態包含是把整個文件內容包含到當前文件中,所以,被包含文件可以訪問包含文件的定義的局部變量
- 被包含文件可以是
JSP
、HTML
,但不能是Servlet
- 靜態包含發生在解析期
- 服務器在解析一個包含另一個JSP文件的JSP文件時,解析到
- 動態包含
- 服務器在解析一個包含另一個JSP文件的JSP文件時,先把當前JSP翻譯爲Servlet,解析包含語句
<jsp:include page="URL" />
,翻譯爲org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "包含的文件名", out, false)
這條語句,翻譯完之後,運行這個Servlet,運行Servlet時碰到上述包含語句org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "包含的文件名", out, false)
,再開始解析被包含文件的內容,把它翻譯爲一個Servlet,在運行這個Servlet,運行完,回到當前Servlet繼續運行直到結束 - 動態包含是各自JSP文件生成各自對應的Servlet文件,兩個文件時獨立的,所以,被包含文件不能訪問包含文件聲明的變量
- 被包含文件可以是HTML、JSP、Servlet文件
- 動態包含發生在運行時
- 服務器在解析一個包含另一個JSP文件的JSP文件時,先把當前JSP翻譯爲Servlet,解析包含語句
- 如何抉擇
- 靜態包含一般用來包含不會發生變化的網頁內容
- 動態包含一般用來包含會發生變化的網頁內容
- 靜態包含
最後談談JSP
異常
- 使用前面博客所講的
JSP
的page
指令來完成JSP
異常的處理 <%@ page isErrorPage="true">
表示當前JSP
文件爲異常處理文件<%@ page errorPage="URL">
表示當前頁面發生異常,要轉到的異常處理的頁面。- 拋出異常的
JSP
文件和處理異常的JSP
文件之間是請求轉發的關係,共享同一HttpServletRequest
和HttpServletResponse
對象