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

Servlet 兩種跳轉機制深度對比:重定向 vs 請求轉發

     編輯:關於JSP

Web 開發中頁面跳轉分為客戶端跳轉(重定向)與服務器端跳轉(請求轉發),二者在請求處理、數據傳遞、地址欄表現上有本質區別。Servlet 通過 HttpServletResponse 實現重定向,通過 RequestDispatcher 實現轉發。

核心差異對比

特性重定向請求轉發
APIresponse.sendRedirect(url)request.getRequestDispatcher(path).forward(req, resp)
地址欄改變為目標 URL保持原請求 URL 不變
請求對象新請求,原 request 失效同一請求對象傳遞
數據共享不可直接傳遞 request 屬性可共享 request 域屬性
跳轉範圍可跳轉至任意 URL(含外部站點)僅限當前 Web 應用內部資源
執行時機服務端響應後,瀏覽器發起新請求服務端內部直接轉發,單次請求完成

重定向實例

public class RedirectServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.getSession().setAttribute("name", "趙玉強"); // Session 可跨請求
        req.setAttribute("info", "request域數據"); // 重定向後丟失
        resp.sendRedirect("get_info.jsp"); // 客戶端跳轉
    }
}

目標頁 get_info.jsp 只能獲取 Session 屬性,Request 屬性為 null。

請求轉發實例

public class ForwardServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setAttribute("info", "request域數據"); // 轉發後保留
        req.getRequestDispatcher("get_info.jsp").forward(req, resp);
    }
}

目標頁可直接獲取 Request 屬性。

選擇原則

  • 需保留請求數據、內部流程控制 → 請求轉發
  • 跳轉外部站點、防止表單重複提交(PRG 模式)、結業務流程 → 重定向
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved