客戶發送一個請求到服務器,服務器匹配servlet,這都和請求轉發一樣,servlet處理完之後調用了sendRedirect()這個方法,這個方法是response的方法,所以,當這個servlet處理完之後,看到response. senRedirect()方法,立即向客戶端返回這個響應,響應行告訴客戶端你必須要再發送一個請求,去訪問test.jsp,緊接著客戶端受到這個請求後,立刻發出一個新的請求,去請求test.jsp,這裡兩個請求互不干擾,相互獨立,在前面request裡面setAttribute()的任何東西,在後面的request裡面都獲得不了。可見,在sendRedirect()裡面是兩個請求,兩個響應。
response.sendRedirect重定向跳轉
@RequestMapping(value="/testredirect",method = { RequestMethod.POST, RequestMethod.GET })
public ModelAndView testredirect(HttpServletResponse response){
response.sendRedirect("/index");
return null;
}
@RequestMapping(value="/testredirect",method = { RequestMethod.POST, RequestMethod.GET })
public String testredirect(HttpServletResponse response){
return "redirect:/index";
}
@RequestMapping("/testredirect")
public String testredirect(Model model, RedirectAttributes attr) {
//跳轉地址帶上test參數
attr.addFlashAttribute("test", "51gjie");
//u2參數不會跟隨在URL後面
attr.addFlashAttribute("u2", "51gjie");
return "redirect:/user/users";
}
@RequestMapping(value="/restredirect",method = {RequestMethod.POST, RequestMethod.GET})
public ModelAndView restredirect(String userName){
ModelAndView model = new ModelAndView("redirect:/main/index");
return model;
}
@RequestMapping(value="/toredirect",method = {RequestMethod.POST, RequestMethod.GET})
public ModelAndView toredirect(String userName){
ModelAndView model = new ModelAndView("/main/index");
//把userName參數帶入到控制器的RedirectAttributes
model.addObject("userName", userName);
return model;
}
1. redirect重定向可以跳轉到任意服務器,可以用在系統間的跳轉。
2. Spring MVC中redirect重定向,參數傳遞可以直接拼接url也可以使用RedirectAttributes來處理,由於是不同的請求,重定向傳遞的參數會在地址欄顯示,所以傳遞時要對中文編碼進行處理。