1. 程式人生 > >javaweb中重定向和請求轉發(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的區別

javaweb中重定向和請求轉發(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的區別

客戶端 不起作用 這也 方法 cnblogs rect() 獲取url rec alt

先來兩張圖,方便理解:

技術分享

可以看出,重定向時,是服務器向遊覽器重新發送了一個response命令,讓遊覽器再次向url2發送請求,以獲取url2的資源

而請求轉發時,類似於是服務器自己向自己發了一個跳轉,然後將結果直接給遊覽器,這也是問什麽遊覽器會不改變url地址。下面是具體總結他們的區別

一、response.sendRedirect(url)-服務器將新url發送給遊覽器,遊覽器再根據新url請求

Request.getRequestDispatcher(url).forward(request,response);請求轉發到指定url(服務器內部跳轉url然後將結果發給遊覽器)

二、response.sendRedirect(url)--客戶端跳轉

Request.getRequestDispatcher(url).forward(request,response)--服務器跳轉

三、response.sendRedirect(url)--跳轉到指定url地址後,上個頁面的請求會結束,request對象會消亡,數據會消亡。

Request.getRequestDispatcher(url).forward(request,response)--內部跳轉,request對象一直存在

四、response.sendRedirect(url)--網址會改變

Request.getRequestDispatcher(url).forward(request,response)--以遊覽器角度來看,他只是發送一個

request然後收到一個response,所以url不變

五、response.sendRedirect(url)--傳參數需要在url後加參數。

Request.getRequestDispatcher(url).forward(request,response)-傳參數可以操作request對象方法setAttribute(“name”,value)

六、response.sendRedirect(url)-可以定位到任意的網址

Request.getRequestDispatcher(url).forward(request,response)-只能定位到服務器資源

七、response.sendRedirect(url)--可以重定向有

framejsp文件

Resquest.getRequestDispatcher(url).forward(request,response)-不可以重定向有framejsp文件,可以定向到有framehtml文件,只有在客戶端沒有輸出時才可以調用forward方法,如果當前頁面緩沖區不是空的,那麽該句可能不起作用,由於這種提交不會改變url地址,刷新會重復提交。

javaweb中重定向和請求轉發(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的區別