在 Java Web 中,轉(zhuǎn)發(fā)(forward)和重定向(redirect)都是將請(qǐng)求從一個(gè)頁(yè)面發(fā)送到另一個(gè)頁(yè)面的方式,但是它們有以下區(qū)別:
目標(biāo)頁(yè)面不同:轉(zhuǎn)發(fā)是將請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器上的另一個(gè)頁(yè)面,而重定向是將請(qǐng)求重定向到客戶端請(qǐng)求的另一個(gè)頁(yè)面。
地址欄顯示不同:在轉(zhuǎn)發(fā)過(guò)程中,瀏覽器的地址欄不會(huì)改變,而在重定向過(guò)程中,瀏覽器會(huì)顯示重定向的地址。
對(duì)于被重定向的頁(yè)面,瀏覽器需要重新發(fā)送請(qǐng)求,而對(duì)于被轉(zhuǎn)發(fā)的頁(yè)面,瀏覽器不需要重新發(fā)送請(qǐng)求。
重定向可以訪問(wèn)其他站點(diǎn)的資源,而轉(zhuǎn)發(fā)只能訪問(wèn)同一個(gè)站點(diǎn)的資源。
在轉(zhuǎn)發(fā)過(guò)程中,request 域中的數(shù)據(jù)可以傳遞到目標(biāo)頁(yè)面;而在重定向過(guò)程中,由于是新的請(qǐng)求,request 域中的數(shù)據(jù)不會(huì)傳遞到目標(biāo)頁(yè)面,需要通過(guò) session 等其他方式傳遞數(shù)據(jù)。
因此,選擇使用轉(zhuǎn)發(fā)還是重定向取決于具體的應(yīng)用場(chǎng)景和需求。如果需要將請(qǐng)求轉(zhuǎn)發(fā)到同一應(yīng)用的不同頁(yè)面,同時(shí)保留瀏覽器地址欄不變,可以選擇轉(zhuǎn)發(fā);如果需要將請(qǐng)求重定向到其他站點(diǎn)的頁(yè)面,或者需要改變?yōu)g覽器的地址欄,可以選擇重定向。