Http中的重定向和請求轉發

1.重定向和請求轉發區別

本質區別

例子1. 假設你去辦理護照
java

重定向: 你先去了A局, A局的人說: "這個事情不歸咱們管的,你去B局吧", 而後你就從A局退了出來, 去了B局web

轉發: 你先去了A局, A局看了之後知道這個事情其實應該由B局來管的, 可是沒有把你退回來,而是讓你坐一下子,本身到後面辦公室聯繫了B局的人,讓他們辦好以後給送了回來spring


總結:瀏覽器

  • 請求轉發是服務器的行爲,重定向是客戶端的行爲服務器

  • 請求轉發的流程是:客戶端瀏覽器發送請求->web服務器接受->調用內部的方法容器內部完成請求處理和轉發動做->session

    將目標資源發送給客戶mvc

    在客戶瀏覽器路徑下顯示的是第一次訪問的路徑,也就是說客戶端感受不到服務器端作了轉發,轉發行爲是瀏覽器只作了一次訪問的app

  • 重定向的流程是:客戶端瀏覽器發送請求->web服務器接受後發送302狀態碼響應->客戶端發現是302響應,則自動發送一個新的請求->服務器根據此請求尋找資源發送給客戶jsp

    在客戶端瀏覽器路徑欄顯示的是其重定向的路徑,客戶能夠觀察地址的變化,重定向的行爲是瀏覽器作了至少兩次訪問ui

  • 在重定向的過程當中,傳輸的信息會被丟失


2.springmvc中請求轉發和重定向

請求轉發

(1)返回ModelAndView

@RequestMapping(value="/forward",method=RequestMethod.GET)
public ModelAndView testForward(ModelAndView model,@RequestParam(value="id",defaultValue="1",required=false)Long id){
     User u = getBaseService().get(User.class, id);
     model.addObject("user", u);
     model.setViewName("forward:index.jsp");
     return model;
}


(2) 返回字符串

@RequestMapping(value="/forward",method=RequestMethod.GET)
    public String testForward(){
        return "forward:/index.action";
    }


重定向

   1.帶參數

@RequestMapping(value="/redirect",method=RequestMethod.GET)  
public String testRedirect(RedirectAttributes attr){  
     attr.addAttribute("a", "a");  
     attr.addFlashAttribute("b", "b");  
     return "redirect:/index.action";  
}

 這裏須要說明一下:

 1.使用RedirectAttribute的addAttribute方法傳遞參數會跟隨URL後面,如上面即爲http://index.action?a=a

 2.使用addFlashAttribute不會跟在URL後面,會把該參數值暫時保存在session中,待重定向url獲取該參數後從session中移除


   2.無參數

@RequestMapping(value="/redirect",method=RequestMethod.GET)
public String testRedirect(){
   return "redirect:/index.action";
}
相關文章
相關標籤/搜索