【Servlet】请求转发与重定向
重定向
重定向是指由原請(qǐng)求地址重新定位到某個(gè)新地址,原有的request請(qǐng)求失效,客戶端看到的是新的request請(qǐng)求返回的響應(yīng)結(jié)果,客戶端瀏覽器地址欄變?yōu)樾抡?qǐng)求地址。
一次重定向過(guò)程存在兩次請(qǐng)求和兩次響應(yīng)。
重定向通過(guò)HttpServletResponse對(duì)象的sendRedirect()方法實(shí)現(xiàn),該方法會(huì)通知客戶端去重新訪問(wèn)新指定的URL地址,其語(yǔ)法格式如下:public void sendRedirect(String location)throws java.io.IOException,location參數(shù)用以指定重定向的URL,它可以是相對(duì)路徑或絕對(duì)路徑。
sendRedirect()方法不僅可以重定向到當(dāng)前應(yīng)用程序中的其他資源,還可以重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序中的資源,甚至是使用絕對(duì)URL重定向到其他站點(diǎn)的資源。
請(qǐng)求轉(zhuǎn)發(fā)
請(qǐng)求轉(zhuǎn)發(fā)是指將請(qǐng)求再轉(zhuǎn)發(fā)到其他地址,轉(zhuǎn)發(fā)過(guò)程中使用的是同一個(gè)request請(qǐng)求,轉(zhuǎn)發(fā)后瀏覽器地址欄內(nèi)容不變。
請(qǐng)求轉(zhuǎn)發(fā)的過(guò)程發(fā)生在服務(wù)器內(nèi)部,只能從當(dāng)前應(yīng)用內(nèi)部查找相應(yīng)的轉(zhuǎn)發(fā)資源,而不能轉(zhuǎn)發(fā)到其它應(yīng)用的資源。
請(qǐng)求轉(zhuǎn)發(fā)使用RequestDispatcher接口中的forward()方法來(lái)實(shí)現(xiàn),該方法可以把請(qǐng)求轉(zhuǎn)發(fā)給另外一個(gè)資源,并讓該資源對(duì)此請(qǐng)求進(jìn)行響應(yīng)。
RequestDispatcher接口有以下兩個(gè)方法:
- forward()方法:將請(qǐng)求轉(zhuǎn)發(fā)給其他資源。
- include()方法:將其他資源并入到當(dāng)前請(qǐng)求中。
請(qǐng)求轉(zhuǎn)發(fā)語(yǔ)法:
RequestDispatcher dispatcher = request.getRequestDispatcher(String path); dispatcher.forward(ServletRequest request,ServletResponse response);其中:
- path參數(shù)用以指定轉(zhuǎn)發(fā)的URL,只能是相對(duì)路徑。
- request和response參數(shù)取值為當(dāng)前請(qǐng)求所對(duì)應(yīng)的HttpServletRequest和HttpServletResponse對(duì)象。
數(shù)據(jù)傳遞
請(qǐng)求轉(zhuǎn)發(fā)與重定向?qū)ttpServletRequest對(duì)象屬性的存取語(yǔ)法:
- request.setAttribute("attrobj", “value"); // 將attrobj屬性值存儲(chǔ)到request對(duì)象中
- request.getAttribute("attrobj"); // 從request對(duì)象中取出attrobj屬性值
辨析
重定向和請(qǐng)求轉(zhuǎn)發(fā)都可以讓瀏覽器獲得另外一個(gè)URL所指向的資源,但兩者的內(nèi)部運(yùn)行機(jī)制有很大的區(qū)別:
- 請(qǐng)求轉(zhuǎn)發(fā)只能將請(qǐng)求轉(zhuǎn)發(fā)給同一個(gè)Web應(yīng)用中的組件;而重定向不僅可以重定向到當(dāng)前應(yīng)用程序中的其他資源,還可以重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序中的資源,或者重定向到其他站點(diǎn)的資源。
- 重定向的訪問(wèn)過(guò)程結(jié)束后,瀏覽器地址欄中顯示的URL會(huì)發(fā)生改變,由初始的URL地址變成重定向的目標(biāo)URL;而請(qǐng)求轉(zhuǎn)發(fā)過(guò)程結(jié)束后,瀏覽器地址欄保持初始的URL地址不變。
- 請(qǐng)求轉(zhuǎn)發(fā)調(diào)用者與被調(diào)用者之間共享相同的request對(duì)象和response對(duì)象,它們屬于同一個(gè)訪問(wèn)請(qǐng)求和響應(yīng)過(guò)程;而重定向調(diào)用者與被調(diào)用者使用各自的request對(duì)象和response對(duì)象,它們屬于兩個(gè)獨(dú)立的訪問(wèn)請(qǐng)求和響應(yīng)過(guò)程。
總結(jié)
以上是生活随笔為你收集整理的【Servlet】请求转发与重定向的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c++中的可变参数
- 下一篇: catch(...)详解