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


先來兩張圖,方便理解:

 

可以看出,重定向時,是服務器向游覽器重新發送了一個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地址,刷新會重復提交。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM