1. 程式人生 > >spring mvc 請求轉發和重定向

spring mvc 請求轉發和重定向

請求重定向與請求轉發的比較,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; } }