javaweb中重定向和請求轉(zhuǎn)發(fā)(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的區(qū)別
重定向時,是服務(wù)器向游覽器重新發(fā)送了一個response命令,讓游覽器再次向url2發(fā)送請求,以獲取url2的資源 。
請求轉(zhuǎn)發(fā)時,類似于是服務(wù)器自己向自己發(fā)了一個跳轉(zhuǎn),然后將結(jié)果直接給游覽器,這也是為什么游覽器會不改變url地址。
一、response.sendRedirect(url)-服務(wù)器將新url發(fā)送給瀏覽器,游覽器再根據(jù)新url請求 ;Request.getRequestDispatcher(url).forward(request,response);請求轉(zhuǎn)發(fā)到指定url(服務(wù)器內(nèi)部跳轉(zhuǎn)url然后將結(jié)果發(fā)給游覽器) ;
二、response.sendRedirect(url)--客戶端跳轉(zhuǎn) Request.getRequestDispatcher(url).forward(request,response)--服務(wù)器跳轉(zhuǎn)
三、response.sendRedirect(url)--跳轉(zhuǎn)到指定url地址后,上個頁面的請求會結(jié)束,request對象會消亡,數(shù)據(jù)會消亡。 Request.getRequestDispatcher(url).forward(request,response)--內(nèi)部跳轉(zhuǎn),request對象一直存在
四、response.sendRedirect(url)--網(wǎng)址會改變 Request.getRequestDispatcher(url).forward(request,response)--以游覽器角度來看,他只是發(fā)送一個request然后收到一個response,所以url不變
五、response.sendRedirect(url)--傳參數(shù)需要在url后加參數(shù)。 Request.getRequestDispatcher(url).forward(request,response)-傳參數(shù)可以操作request對象方法setAttribute(“name”,value)
六、response.sendRedirect(url)-可以定位到任意的網(wǎng)址 Request.getRequestDispatcher(url).forward(request,response)-只能定位到服務(wù)器資源
七、response.sendRedirect(url)--可以重定向有frame的jsp文件 Resquest.getRequestDispatcher(url).forward(request,response)-不可以重定向有frame的jsp文件,可以定向到有frame的html文件,只有在客戶端沒有輸出時才可以調(diào)用forward方法,如果當(dāng)前頁面緩沖區(qū)不是空的,那么該句可能不起作用,由于這種提交不會改變url地址,刷新會重復(fù)提交。