JSP請求轉發

JSP請求

  • JSP使用<jsp:forward page="URL" />標籤來轉發請求
  • 轉發的目標組件可以是HTMLJSPServlet
  • 轉發點和Servlet一樣,所有源組件的響應正文都不會被髮送給瀏覽器,共享HttpServletRequestHttpServletResponse對象
  • Servlet中,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”)來分別獲取值Tom12345

JSP包含

  • JSP可以使用<jsp:include page="URL" />標籤和include指令來包含其他文件

    • 標籤包含語法
      <jsp:include page="URL" />

    • 指令包含的語法
      <%@ include file="URL"%>

  • include指令用於靜態包含,<jsp:include>標籤用於動態包含,無論是靜態包含還是動態包含,都共享請求範圍內的數據

  • 靜態包含和動態包含
    • 靜態包含
      • 服務器在解析一個包含另一個JSP文件的JSP文件時,解析到include指令,就把這個指令指定的文件的整個內容完全包含到當前JSP文件中,然後在把整個JSP翻譯爲一個Servlet,編譯,運行
      • 由於靜態包含是把整個文件內容包含到當前文件中,所以,被包含文件可以訪問包含文件的定義的局部變量
      • 被包含文件可以是JSPHTML,但不能是Servlet
      • 靜態包含發生在解析期
    • 動態包含
      • 服務器在解析一個包含另一個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異常

  • 使用前面博客所講的JSPpage指令來完成JSP異常的處理
  • <%@ page isErrorPage="true">表示當前JSP文件爲異常處理文件
  • <%@ page errorPage="URL">表示當前頁面發生異常,要轉到的異常處理的頁面。
  • 拋出異常的JSP文件和處理異常的JSP文件之間是請求轉發的關係,共享同一HttpServletRequestHttpServletResponse對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章