轉(zhuǎn)發(fā)和重定向的區(qū)別

request.getRequestDispatcher()是容器中控制權(quán)的轉(zhuǎn)向,在客戶(hù)端瀏覽器地址欄中不會(huì)顯示出轉(zhuǎn)向后的地址;服務(wù)器內(nèi)部轉(zhuǎn)發(fā),整個(gè)過(guò)程處于同一個(gè)請(qǐng)求當(dāng)中。
response.sendRedirect()則是完全的跳轉(zhuǎn),瀏覽器將會(huì)得到跳轉(zhuǎn)的地址,并重新發(fā)送請(qǐng)求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。不在同一個(gè)請(qǐng)求。重定向,實(shí)際上客戶(hù)端會(huì)向服務(wù)器端發(fā)送兩個(gè)請(qǐng)求。
所以轉(zhuǎn)發(fā)中數(shù)據(jù)的存取可以用request作用域:request.setAttribute(), request.getAttribute(),重定向是取不到request中的數(shù)據(jù)的。只能用session。

forward()更加高效,在可以滿(mǎn)足需要時(shí),盡量使用RequestDispatcher.forward()方法。(思考一下為什么?)

RequestDispatcher是通過(guò)調(diào)用HttpServletRequest對(duì)象的getRequestDispatcher()方法得到的,是屬于請(qǐng)求對(duì)象的方法。
sendRedirect()是HttpServletResponse對(duì)象的方法,即響應(yīng)對(duì)象的方法,既然調(diào)用了響應(yīng)對(duì)象的方法,那就表明整個(gè)請(qǐng)求過(guò)程已經(jīng)結(jié)束了,服務(wù)器開(kāi)始向客戶(hù)端返回執(zhí)行的結(jié)果。

重定向可以跨域訪問(wèn),而轉(zhuǎn)發(fā)是在web服務(wù)器內(nèi)部進(jìn)行的,不能跨域訪問(wèn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容