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

JSP 頁面重導向實作

     編輯:JSP 入門

JSP 頁面重導向實作

當需將使用者導向新網址 (如舊網址遷移、登入後跳轉、錯誤頁面) 時,JSP 提供兩種主要重導向方式。


方式一:sendRedirect() (最常用)

response.sendRedirect("https://example.com/new-page");
  • 傳送 HTTP 302 狀態碼與 Location 標頭
  • 瀏覽器收到後自動發起新請求,網址列會改變
  • 可導向相對路徑、絕對路徑或外部網域

方式二:手動設定狀態碼與標頭

response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); // 302
response.setHeader("Location", "https://example.com/new-page");

等同於 sendRedirect(),但可自訂狀態碼 (如 301 永久移動、307 暫時重導向保持方法)。


完整範例:登入檢查後重導向

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
  // 假設從 Session 判斷是否登入
  Boolean loggedIn = (Boolean) session.getAttribute("loggedIn");
  if (loggedIn == null || !loggedIn) {
    // 未登入 → 導向登入頁,並帶上原網址供登入後返回
    String target = request.getRequestURI();
    String query = request.getQueryString();
    if (query != null) target += "?" + query;
    response.sendRedirect("login.jsp?redirect=" + java.net.URLEncoder.encode(target, "UTF-8"));
    return; // 重要:終止後續輸出
  }
%>
<!DOCTYPE html>
<html><head><title>會員專區</title></head>
<body>
  <h1>歡迎會員</h1>
  <p>這是受保護的內容...</p>
</body></html>

重導向 vs 轉發 (Forward) 差異比較

特性重導向 (Redirect)轉發 (Forward)
HTTP 互動兩次請求 (302 + 新請求)單次請求 (伺服器內部)
瀏覽器網址改變為新網址保持原網址
Request 物件新建立,原屬性遺失共用同一個,屬性保留
目標範圍同網域、跨網域皆可僅限同一 Web 應用內部
適用場景表單送出後 (PRG 模式)、跨域、永久遷移頁面組合、權限檢查後內部跳轉

PRG 模式 (Post-Redirect-Get)

防止表單重複送出的標準模式:

  1. 使用者 POST 表單至 process.jsp
  2. process.jsp 處理資料後 response.sendRedirect("result.jsp")
  3. 瀏覽器 GET result.jsp 顯示結果
  4. 重新整理結果頁不會再次提交表單

注意事項

  • 在輸出任何內容前呼叫:sendRedirect() 必須在 out.write()、HTML 標籤、空白字元之前,否則拋出 IllegalStateException。
  • 相對路徑解析:相對於當前請求 URL,建議使用 request.getContextPath() 組合絕對路徑:
    response.sendRedirect(request.getContextPath() + "/member/profile.jsp");
  • 永久移動 (301):SEO 遷移時使用 SC_MOVED_PERMANENTLY,搜尋引擎會更新索引。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved