spring mvc 請求轉發和重定向


請求轉發,直接調用跳轉的頁面,讓它返回,,對於瀏覽器來說,它無法感覺服務器有沒有forward。地址欄不變

(1)返回ModelAndView :

@RequestMapping(value="/model",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;
}
如上代碼,如果返回modelAndView 則可以如標注,添加forward即可,若想重定向,可把forward替換成redirect便可達到目的。

(2)返回字符串

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

請求重定向,重定向是發一個302的狀態碼給瀏覽器,瀏覽器自己去請求跳轉的網頁,url改變,request數據不帶到重定向的方法中

對於請求轉發可以分為:1.帶參數 2.不帶參數

(1)帶參數

@RequestMapping(value="/redirect",method=RequestMethod.GET)  
public String testRedirect(RedirectAttributes attr){  
     attr.addAttribute("a", "a");  
     attr.addFlashAttribute("b", "b");  
     return "redirect:/index.action";  
}
帶參數可使用RedirectAttributes參數進行傳遞:

注意:

  • 1. 使用RedirectAttributes的addAttribute方法傳遞參數會跟隨在URL后面 ,如上代碼即為http:/index.action?a=a
  • 2. 使用addFlashAttribute不會跟隨在URL后面,會把該參數值暫時保存於session,待重定向url獲取該參數后從session中移除,這里的redirect必須是方法映射路徑,jsp無效。你會發現redirect后的jsp頁面中b只會出現一次,刷新后b再也不會出現了,這驗證了上面說的,b被訪問后就會從session中移除。對於重復提交可以使用此來完成。
  • 另外,如果使用了RedirectAttributes作為參數,但是沒有進行redirect呢?這種情況下不會將RedirectAttributes參數傳遞過去,默認傳forward對應的model,官方的建議是:

p:ignoreDefaultModelOnRedirect="true" />1

設置下RequestMappingHandlerAdapter 的ignoreDefaultModelOnRedirect屬性,這樣可以提高效率,避免不必要的檢索。

(2)無參數

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


public String testRedirect(){
    return index.action;
}
# 這里index.action和testRedirect在一個springmvc中


免責聲明!

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



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