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

JSP 三種頁面跳轉方式詳細比較:sendRedirect、setHeader、forward

     編輯:關於JSP

三種跳轉方式

  1. response.sendRedirect(url)
  2. response.setHeader("Location", url)
  3. <jsp:forward page="..." /> 或 request.getRequestDispatcher(...).forward()

實測規則總結表

特性sendRedirectsetHeader(Location)forward
前方不可有 out.flush()是(拋 IllegalStateException)是(頁面不跳轉)是(拋 IllegalStateException)
瀏覽器網址列變化是是否(維持原 URL)
跨主機跳轉支援支援不支援(同一 Web 容器內)
後續代碼執行時機不同主機:似新執行緒繼續;同主機:執行完才跳轉執行完才跳轉執行完才跳轉
Response 操作有效性跳轉後無效跳轉後無效跳轉前有效

核心差異解析

sendRedirect(客戶端跳轉)

  • 瀏覽器收到 302 狀態碼與 Location 標頭,重新發出 GET 請求。
  • 請求物件重建,原請求參數/屬性遺失。
  • 適用:跨應用、跨域、登入後導向、需讓使用者看到新 URL。

setHeader("Location")(手動設定 302)

  • 本質同 sendRedirect,但需自行管理狀態碼(response.setStatus(302))。
  • 較底層,鮮少直接使用。

forward(伺服器端轉發)

  • 容器內部轉交控制權,瀏覽器不知情,URL 不變。
  • 同一請求物件,參數/屬性完整保留。
  • 效能較高,適用同一應用內流程控制。
  • 限制:目標資源必須在同一 Web 應用;無法攜帶查詢字串參數(需用 request.setAttribute)。

最佳實務建議

  • 同一應用內流程轉向 → 優先用 forward。
  • 跨應用、登入驗證、需更新瀏覽器歷史紀錄 → 用 sendRedirect。
  • 跳轉前避免任何輸出(含空白、換行),或確保緩衝區未提交(預設 8KB)。
  • sendRedirect 後緊接 return,防止後續邏輯干擾。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved