首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> JSP 程式設計 >> 關於JSP

JSP forward 動作標籤實現頁面轉發與參數傳遞完整教學

     編輯:關於JSP

語法

<jsp:forward page="{relativeURL | <%= expression %>}" />
<jsp:forward page="{relativeURL | <%= expression %>}">
    <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" />+
</jsp:forward>

核心特性

  • 伺服器端轉發:瀏覽器 URL 不變,請求在容器內部轉給目標資源。
  • 請求物件共享:目標頁面可存取原始 `request` 所有屬性與參數。
  • 參數追加:`` 會新增/覆蓋請求參數,目標頁面用 `request.getParameter()` 取得。
  • 緩衝區處理:轉發前若已有輸出內容且緩衝區未 flush,會拋出 `IllegalStateException`。建議轉發前不輸出內容或設定 `page` 指令 `buffer="none"`/`autoFlush="true"`。

範例 1:簡單轉發

test1.jsp

<HTML><HEAD><TITLE>forward test</TITLE></HEAD>
<BODY>
<!-- 轉發至 test2.jsp -->
<jsp:forward page="/test2.jsp" />
</BODY></HTML>

test2.jsp

<HTML><BODY>
<% out.println("這是 test2.jsp 頁面產生的輸出"); %>
</BODY></HTML>

瀏覽器訪問 `test1.jsp` 顯示 test2 的輸出,網址列仍為 `test1.jsp`。

範例 2:帶參數轉發

test3.jsp

<HTML><BODY>
<jsp:forward page="/test4.jsp">
    <jsp:param name="name" value="powerman" />
    <jsp:param name="address" value="北京西大街188號" />
</jsp:forward>
</BODY></HTML>

test4.jsp

<HTML><BODY>
<%
    out.println("這是 test4.jsp 頁面產生的輸出<br>");
    out.println("姓名:" + request.getParameter("name") + "<br>");
    out.println("地址:" + request.getParameter("address") + "<br>");
%>
</BODY></HTML>

輸出:

這是 test4.jsp 頁面產生的輸出
姓名:powerman
地址:北京西大街188號

forward vs. sendRedirect 對比

特性<jsp:forward>response.sendRedirect()
處理位置伺服器端客戶端 (瀏覽器)
瀏覽器 URL不變改為新 URL
Request 物件共享新請求,原 request 失效
速度較快 (單次請求)較慢 (兩次請求)
跨域/跨容器不可可
適用場景內部流程控制、MVC Controller 轉 View登入後跳轉、外部連結、POST 後重導向防重複提交

最佳實務

  1. 轉發前勿輸出任何內容 (含空白、換行),避免緩衝區衝突。
  2. 使用相對路徑以 `/` 開頭 (相對於 Web 應用根目錄),提高可移植性。
  3. 參數值含中文時,確保來源 JSP `pageEncoding` 與目標 JSP 解碼一致 (建議全站 UTF-8)。
  4. MVC 架構中,Controller (Servlet) 處理完業務後 `request.getRequestDispatcher("/view.jsp").forward(req, resp)` 等價於 ``。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved