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

Spring MVC Controller 重定向實現:redirect: 前綴與 forward: 區別

     編輯:程式設計綜合問答

核心語法

@Controller
public class MyController {
    @RequestMapping("/action1")
    public String handle() {
        // 業務邏輯...
        return "redirect:/action2";  // 客戶端跳轉,瀏覽器地址欄變化
        // return "forward:/action2"; // 服務端內部轉發,地址欄不變
    }

    @RequestMapping("/action2")
    public String target() {
        return "viewPage"; // 解析為 /WEB-INF/views/viewPage.jsp
    }
}

redirect vs forward 對比

特性redirect:forward:
HTTP 狀態碼302 Found無(內部轉發)
瀏覽器地址欄變為目標 URL保持原 URL
請求對象新請求(原 request 失效)同一 request
數據傳遞需攜帶參數或用 FlashMap/Session直接訪問 request 屬性
適用場景表單提交後防重複刷新 (PRG 模式)、跨應用跳轉同一請求鏈路內分派、錯誤頁面轉發

傳遞數據的三種方式

  1. URL 參數:return "redirect:/action2?id=123&name=abc";
  2. RedirectAttributes (Spring 3.1+):
    redirectAttributes.addFlashAttribute("msg", "成功"); 目標方法用 @ModelAttribute("msg") String msg 接收。
  3. Session:大對象或跨控制器,session.setAttribute("key", obj)。

最佳實踐:PRG 模式

@PostMapping("/save")
public String save(@Valid Form form, RedirectAttributes ra) {
    service.save(form);
    ra.addFlashAttribute("success", true);
    return "redirect:/list"; // 避免 F5 重複提交
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved