SpringCloud : URL 重定向 和 轉發


Web UI項目中, 很多 Spring controller 視圖函數直接返回 html 頁面, 還有一些視圖函數是要重定向或轉發到其他的 url 上.

redirect 和 forward的區別:

重定向 redirect: 完整的重定向包含兩次request-response過程, 第一次是訪問原始url, 第二次是服務器通知客戶端訪問重定向后的url. 重定向完成后, 瀏覽器的地址是重定向后的url, 而不是原始的url. 
重定向的使用場景: 因為重定向會修改瀏覽器地址, 所以 form 提交應該使用重定向, 以免用戶刷新頁面導致form重復提交.

 

轉發 forward: 完整的轉發僅包含一次 request-response 過程, 用戶發出request后, 服務器端視圖函數先處理自己的邏輯, 然后在服務器端有調用另一個視圖函數, 最后將response返回給瀏覽器.

 

示例:

@RequestMapping("/")
public class DemoController {

    /*
     * forward 示例: 以字符串的形式構建目標url, url 需要加上 forward: 前綴
     * */
    @RequestMapping("/forwardTest1")
    public String forwardTest1() {
        return "forward:/forwardTarget?param1=v1&param2=v2";
    }


    /*
     * forward 示例: 使用 ModelAndView() 設置轉發的目標url
     * */
    @RequestMapping("/forwardTest2")
    public ModelAndView forwardTest2() {
        ModelAndView mav=new ModelAndView("/forwardTarget"); // 絕對路徑OK
        //ModelAndView mav=new ModelAndView("forwardTarget"); // 相對路徑也OK
        mav.addObject("param1", "value1");
        mav.addObject("param2", "value2");
        return mav ;
    }


    /*
     * redirect 目標有三種構建方式
     * 1. 使用 redirect: 前綴url方式構建目標url
     * 2. 使用 RedirectView 類型指定目標
     * 3. 使用 ModelAndView 類型指定目標, ModelAndView 視圖名默認是forward, 所以對於redirect, 需要加上 redirect: 前綴
     * */
    @RequestMapping("/noParamRedirect")
    public RedirectView noParamTest() {
        return new RedirectView("http://www.qq.com");
    }



    public String noParamTest2() {
        return "redirect:http://www.qq.com";
    }
}

 

PS:

https://www.cnblogs.com/harrychinese/p/SpringBoot_redirect_and_forward.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM