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

Java Web 核心:轉發 vs 重定向 —— 原理、差異與選型指南

     編輯:Java 相關知識

一句話總結

轉發:服務端內部跳轉,請求對象共享,瀏覽器地址欄不變;
重定向:雙請求協作,瀏覽器地址欄更新,請求對象重建。

底層機制對比

維度轉發重定向
APIrequest.getRequestDispatcher("/path").forward(req, resp)response.sendRedirect("/path")
請求次數1 次2 次(302 + 新請求)
請求對象同一個 HttpServletRequest全新 HttpServletRequest
數據共享request 域屬性可傳遞需用 Session/資料庫/URL 參數
瀏覽器 URL不變變為目標地址
訪問範圍僅當前 Web 應用內部資源任意 URL(跨域、外部站點)
性能略快(無網絡往返)稍慢(額外一次請求)
刷新行為重複執行原請求(可能重複提交)重複執行目標請求(安全)

代碼示例

轉發

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
        String user = req.getParameter("username");
        req.setAttribute("user", user);  // 數據放入 request
        try {
            req.getRequestDispatcher("/welcome.jsp").forward(req, resp);
        } catch (ServletException | IOException e) {
            throw new RuntimeException(e);
        }
    }
}

重定向

@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        req.getSession().invalidate();
        try {
            resp.sendRedirect(req.getContextPath() + "/login.jsp");  // 瀏覽器跳轉
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

選型決策樹

  1. 需跨應用/外部網址? → 重定向
  2. 需保留 request 參數/屬性? → 轉發
  3. 表單提交後防重複提交? → 重定向 (PRG 模式:Post-Redirect-Get)
  4. 單純頁面跳轉、邏輯內聚? → 轉發

進階:Spring MVC 中的對應

返回類型轉發寫法重定向寫法
Stringreturn "forward:/view/page"return "redirect:/view/page"
ModelAndViewnew ModelAndView("forward:/view/page")new ModelAndView("redirect:/view/page")

常見坑點

  • 轉發後刷新瀏覽器 → 重複提交表單 → 使用 PRG 模式或 Token 機制
  • 重定向丟失 request 數據 → 改用 RedirectAttributes.addFlashAttribute() (Spring) 或 Session
  • 路徑寫法:轉發路徑不加項目上下文;重定向需加 contextPath 或以 / 開頭

總結

理解「一次請求 vs 兩次請求」、「request 域共享 vs 隔離」兩大本質,轉發與重定向選型不再糾結。

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