spring mvc 請求轉發和重定向
阿新 • • 發佈:2019-01-06
請求重定向與請求轉發的比較,HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以讓瀏覽器獲得另外一個URL所指向的資源,但兩者的內部執行機制有很大的區別。
1.RequestDispatcher.forward方法只能將請求轉發給同一個Web應用中的元件,HttpServletResponse.sendRedirect不僅可以重定向到當前應用程式的其他資源,還可以重定向到同一個站點上的其他應用程式的資源,甚至是使用絕對URL重定向到其他站點的資源。對於sendRedirect如果傳遞的URL以”/”開頭,他是相對於整個Web站點的根目錄;對於forward如果傳遞的URL以”/”開頭,它是相對於當前Web應用程式的根目錄。
2.sendRedirect對瀏覽器做出的響應是重新發出對另外一個URL的訪問請求,forward在伺服器端內部將請求轉發給另外一個資源,瀏覽器只知道發出了請求並得到了響應結果
3.forward的呼叫者與被呼叫者之間共享相同的request物件和response物件,他們屬於同一個訪問請求和響應過程;sendRedirect的呼叫者與被呼叫者使用各自的request和response物件,屬於兩個獨立的訪問請求和響應過程
請求重定向以redirect:開頭,請求轉發以forward:開頭;
樣例如下:
@RequestMapping(value="/users")
@Controller
public class UserController {
@RequestMapping(value="/queryuser",method = RequestMethod.GET)
public String queryuser(Model model) throws Exception {
return "forward:/users/uc";
}
@RequestMapping(value="/uc",method = RequestMethod.GET)
public String quer(Model model) throws Exception {
return "redirect:/#/home";
}
@RequestMapping(value = "/save", method = RequestMethod.GET)
public ModelAndView saveUser(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView("forward:/users/uc");//預設為forward模式
// ModelAndView mv = new ModelAndView("redirect:/#/home");//redirect模式
return mv;
}
}