請(qǐng)求重定向與請(qǐng)求轉(zhuǎn)發(fā)的比較,HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以讓瀏覽器獲得另外一個(gè)URL所指向的資源,但兩者的內(nèi)部運(yùn)行機(jī)制有很大的區(qū)別。
1.RequestDispatcher.forward方法只能將請(qǐng)求轉(zhuǎn)發(fā)給同一個(gè)Web應(yīng)用中的組件,HttpServletResponse.sendRedirect不僅可以重定向到當(dāng)前應(yīng)用程序的其他資源,還可以重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序的資源,甚至是使用絕對(duì)URL重定向到其他站點(diǎn)的資源。對(duì)于sendRedirect如果傳遞的URL以”/”開(kāi)頭,他是相對(duì)于整個(gè)Web站點(diǎn)的根目錄;對(duì)于forward如果傳遞的URL以”/”開(kāi)頭,它是相對(duì)于當(dāng)前Web應(yīng)用程序的根目錄。
2.sendRedirect對(duì)瀏覽器做出的響應(yīng)是重新發(fā)出對(duì)另外一個(gè)URL的訪(fǎng)問(wèn)請(qǐng)求,forward在服務(wù)器端內(nèi)部將請(qǐng)求轉(zhuǎn)發(fā)給另外一個(gè)資源,瀏覽器只知道發(fā)出了請(qǐng)求并得到了響應(yīng)結(jié)果
3.forward的調(diào)用者與被調(diào)用者之間共享相同的request對(duì)象和response對(duì)象,他們屬于同一個(gè)訪(fǎng)問(wèn)請(qǐng)求和響應(yīng)過(guò)程;sendRedirect的調(diào)用者與被調(diào)用者使用各自的request和response對(duì)象,屬于兩個(gè)獨(dú)立的訪(fǎng)問(wèn)請(qǐng)求和響應(yīng)過(guò)程
請(qǐng)求重定向以redirect:開(kāi)頭,請(qǐng)求轉(zhuǎn)發(fā)以forward:開(kāi)頭;
樣例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
@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" ); //默認(rèn)為forward模式 // ModelAndView mv = new ModelAndView("redirect:/#/home");//redirect模式 return mv; } } |
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:http://blog.csdn.net/u012373815/article/details/52103002