| 特性 | RequestDispatcher.forward() | HttpServletResponse.sendRedirect() |
|---|---|---|
| 執行位置 | 伺服器端(容器內部) | 客戶端(瀏覽器) |
| 瀏覽器網址列 | 不變 | 更新為目標 URL |
| 請求物件 | 共享同一 request/response | 新請求,原物件失效 |
| 參數/屬性傳遞 | 自動保留,可用 setAttribute 補充 | 需重新以查詢字串或 Session 傳遞 |
| 目標資源範圍 | 同一 Web 應用內 | 任意 URL(跨應用、跨域) |
| 效能 | 高(無網路往返) | 較低(額外 HTTP 請求) |
| 書籤/重整行為 | 重整會重送原請求 | 重整只請求目標頁 |
try {
request.getRequestDispatcher("display.jsp").forward(request, response);
} catch (Exception e) { e.printStackTrace(); }
適用:流程控制、表單驗證失敗回顯、同一應用內頁面組合。
response.sendRedirect("display.jsp");
適用:登入成功導向、跨應用跳轉、需讓使用者看到新 URL、防止表單重複提交(PRG 模式)。
forward 可隱藏內部路徑結構,sendRedirect 會暴露真實 URL。若有安全敏感路徑,優先用 forward 或配合 URL 重寫。