1.兩者區(qū)別
重定向是在客戶端發(fā)生的铭段,URL地址欄變化惯裕,可以定向到任何服務(wù)器的資源;
轉(zhuǎn)發(fā)是發(fā)生在服務(wù)器內(nèi)部的撞牢,瀏覽器地址欄不變化率碾,只能轉(zhuǎn)發(fā)本服務(wù)器的資源。
2.使用方法
重定向使用:response.sendRedirect(url);
轉(zhuǎn)發(fā)時(shí)使用:request.getRequestDispatcher(url).forward(request,response);
3.禁用Cookie時(shí)屋彪,如何使用Session
session雖然是服務(wù)器端的所宰,但是在瀏覽器再次訪問(wèn)其他servlet時(shí),服務(wù)器如何知道是否為同一客戶端撼班?其實(shí)歧匈,在瀏覽器訪問(wèn)session資源后,服務(wù)器會(huì)發(fā)送一個(gè)set-cookie響應(yīng)砰嘁,此cookie不是存在本地的,存在瀏覽器內(nèi)部勘究,所以說(shuō)session是基于cookie的矮湘。但是當(dāng)瀏覽器禁用所有cookie時(shí),cookie存不進(jìn)去口糕,服務(wù)器如何分辨客戶機(jī)呢缅阳?
使用URL重寫(xiě),即將session產(chǎn)生的id設(shè)置在URL上,瀏覽器每次訪問(wèn)十办,都帶著此后綴秀撇,所以無(wú)論是否禁用cookie,都能訪問(wèn)同一session資源向族,方法如下:
重定向URL使用
String url = response.encodeRedirectURL(url);
response.sendRedirect(url);
非重定向URL使用
String url = response.encodeURL(url);
response.getRequestDispatcher(url).forward();
表單action和超鏈接也同樣適用
4.其他區(qū)別
a. RequestDispatcher.forward方法只能將請(qǐng)求轉(zhuǎn)發(fā)給同一個(gè)WEB應(yīng)用中的組件呵燕;而HttpServletResponse.sendRedirect 方法還可以重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序中的資源,甚至是使用絕對(duì)URL重定向到其他站點(diǎn)的資源件相。
b. 如果傳遞給HttpServletResponse.sendRedirect 方法的相對(duì)URL以“/”開(kāi)頭再扭,它是相對(duì)于整個(gè)WEB站點(diǎn)的根目錄;如果創(chuàng)建RequestDispatcher對(duì)象時(shí)指定的相對(duì)URL以“/”開(kāi)頭夜矗,它是相對(duì)于當(dāng)前WEB應(yīng)用程序的根目錄泛范。
c. 調(diào)用HttpServletResponse.sendRedirect方法重定向的訪問(wèn)過(guò)程結(jié)束后,瀏覽器地址欄中顯示的URL會(huì)發(fā)生改變紊撕,由初始的URL地址變成重定向的目標(biāo)URL罢荡;調(diào)用RequestDispatcher.forward 方法的請(qǐng)求轉(zhuǎn)發(fā)過(guò)程結(jié)束后,瀏覽器地址欄保持初始的URL地址不變对扶。
d. HttpServletResponse.sendRedirect方法對(duì)瀏覽器的請(qǐng)求直接作出響應(yīng)区赵,響應(yīng)的結(jié)果就是告訴瀏覽器去重新發(fā)出對(duì)另外一個(gè)URL的訪問(wèn)請(qǐng)求;RequestDispatcher.forward方法在服務(wù)器端內(nèi)部將請(qǐng)求轉(zhuǎn)發(fā)給另外一個(gè)資源辩稽,瀏覽器只知道發(fā)出了請(qǐng)求并得到了響應(yīng)結(jié)果惧笛,并不知道在服務(wù)器程序內(nèi)部發(fā)生了轉(zhuǎn)發(fā)行為。
e. RequestDispatcher.forward方法的調(diào)用者與被調(diào)用者之間共享相同的request對(duì)象和response對(duì)象逞泄,它們屬于同一個(gè)訪問(wèn)請(qǐng)求和響應(yīng)過(guò)程患整;而HttpServletResponse.sendRedirect方法調(diào)用者與被調(diào)用者使用各自的request對(duì)象和response對(duì)象,它們屬于兩個(gè)獨(dú)立的訪問(wèn)請(qǐng)求和響應(yīng)過(guò)程喷众。