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

JSP 中 forward() 與 sendRedirect() 差異詳解與選擇指南

     編輯:關於JSP

核心差異一覽

特性RequestDispatcher.forward()HttpServletResponse.sendRedirect()
執行位置伺服器端(容器內部)客戶端(瀏覽器)
瀏覽器網址列不變更新為目標 URL
請求物件共享同一 request/response新請求,原物件失效
參數/屬性傳遞自動保留,可用 setAttribute 補充需重新以查詢字串或 Session 傳遞
目標資源範圍同一 Web 應用內任意 URL(跨應用、跨域)
效能高(無網路往返)較低(額外 HTTP 請求)
書籤/重整行為重整會重送原請求重整只請求目標頁

代碼範例

forward()

try {
    request.getRequestDispatcher("display.jsp").forward(request, response);
} catch (Exception e) { e.printStackTrace(); }

適用:流程控制、表單驗證失敗回顯、同一應用內頁面組合。

sendRedirect()

response.sendRedirect("display.jsp");

適用:登入成功導向、跨應用跳轉、需讓使用者看到新 URL、防止表單重複提交(PRG 模式)。

選擇決策樹

  1. 是否需要跨應用/跨域? → 是 → sendRedirect
  2. 是否需要保留請求參數/屬性給下一頁? → 是 → forward
  3. 是否為表單 POST 處理後導向? → 是 → sendRedirect(PRG 模式)
  4. 預設同一應用內流程轉向 → forward(效能更佳)

隱藏實際連結的安全考量

forward 可隱藏內部路徑結構,sendRedirect 會暴露真實 URL。若有安全敏感路徑,優先用 forward 或配合 URL 重寫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved