Java中的轉(zhuǎn)發(fā)(forward)和重定向(redirect)是常用的網(wǎng)頁(yè)跳轉(zhuǎn)方式,兩者在實(shí)現(xiàn)上有所不同。
重定向相當(dāng)于兩次請(qǐng)求,第一次請(qǐng)求的響應(yīng)會(huì)通知瀏覽器去訪(fǎng)問(wèn)另一個(gè)URL,因此在重定向中,瀏覽器的URL會(huì)改變。而轉(zhuǎn)發(fā)只是單純的從一個(gè)Servlet跳轉(zhuǎn)到另一個(gè)Servlet,瀏覽器的URL不會(huì)發(fā)生改變。
// 重定向示例代碼 response.sendRedirect("http://www.example.com");
// 轉(zhuǎn)發(fā)示例代碼 RequestDispatcher dispatcher = request.getRequestDispatcher("anotherServlet"); dispatcher.forward(request, response);
重定向適用于需要跳轉(zhuǎn)到其他網(wǎng)站或者需要重置請(qǐng)求對(duì)象的情況。而轉(zhuǎn)發(fā)適用于在同一個(gè)web應(yīng)用程序中跳轉(zhuǎn),保留原來(lái)的請(qǐng)求對(duì)象,如在不同的Servlet之間轉(zhuǎn)發(fā)請(qǐng)求,從而共享請(qǐng)求的屬性和參數(shù)。
在性能上,轉(zhuǎn)發(fā)比重定向更快,因?yàn)橹囟ㄏ蛐枰l(fā)起兩個(gè)HTTP請(qǐng)求,而轉(zhuǎn)發(fā)只需要在后端進(jìn)行一次轉(zhuǎn)發(fā)處理。
綜上所述,重定向和轉(zhuǎn)發(fā)都有各自適用的場(chǎng)景,開(kāi)發(fā)者需要根據(jù)具體需求選擇使用。