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