控制權共用

Redirect

又稱重導,透過 HTTP Header回應後,並從瀏覽器跨越請求( 又稱通透性 Transparent),瀏覽器顯示的路徑也會改成重導後的路徑。

無法分享 request 內 attribute 的值。

路徑規則

可以是 完整 URL 路徑[ / ] [無 / ] 。

[ / ] 會加上原呼叫者的所有路徑

[無 / ] 相當於 ROOT,若為本機,就會加上 http://localhost:8081/

//使用方式
req.setRedirect( location )

//等同於
req.setStatus( HttpServletResponse.SC_FOUND )
req.setHeader( "Location" , location )

Forward

轉送,只在伺服器內運行,可以將請求交給其他 Servlet 對象,執行速度較快。

可分享 request 內 attribute 的值

路徑規則

因為在伺服器內運行,必須 [ / ][無 / ] 開頭,且瀏覽器顯示的路徑不會改變。

[ / ] 代表 servlet 環境路徑底下。

[無 / ] 在頁面上使用時(如 jsp),會被加上轉送者對象的路徑,可能造成連結錯誤。

//使用方式
RequestDispatcher dispatcher = req.getRequestDispatcher("/Goto");
dispatcher.forward(req, res);

RequestDispatcher

介面,代表請求的派發者,主要擁有 forward 和 include 方法,能夠讓其他資源也參與其中,並協同完成響應。

Last updated

Was this helpful?