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)--以遊覽器角度來看,他只是發送一個
五、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)--可以重定向有
Resquest.getRequestDispatcher(url).forward(request,response)-不可以重定向有frame的jsp文件,可以定向到有frame的html文件,只有在客戶端沒有輸出時才可以調用forward方法,如果當前頁面緩沖區不是空的,那麽該句可能不起作用,由於這種提交不會改變url地址,刷新會重復提交。
javaweb中重定向和請求轉發(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的區別