1. 程式人生 > >跳轉(Forward)和頁面重定向(Redirect)的區別

跳轉(Forward)和頁面重定向(Redirect)的區別

我們通過兩個流程來看一下它們之間的區別。

Redirect

1. 使用者瀏覽器向 http://localhost:8080/demo/start.xhtml 傳送 GET 請求。 2. JSF收到請求,返回 start.xhtml 頁面。 3. 使用者點選頁面中的按鈕。 4. JSF收到請求,向瀏覽器傳送 Redirect 指令(3XX的HTTP狀態值)。 5. 瀏覽器收到指令,傳送另一個 GET 到 http://localhost:8080/demo/page1.xhtml。 6.JSF返回page1.xhtml。 7. 瀏覽器顯示page1.xhtml。這時位址列裡顯示的是page1.xhtml。

Forward

1. 使用者瀏覽器向 http://localhost:8080/demo/start.xhtml 傳送 GET 請求。 2. JSF收到請求,返回 start.xhtml 頁面。
3. 使用者點選頁面中的按鈕。
4. JSF收到請求,直接渲染page1.xhtml頁面並返回給瀏覽器。 5. 瀏覽器顯示 page1.xhtml。這時候位址列裡顯示的還是start.xhtml
由此可看出,重定向要比跳轉多傳送一個請求,所以相對要慢一些。JSF預設全部採用 Forward的方式跳轉頁面。如果想要重定向頁面,可以在導航中新增 <redirect />,或者在 h:commandButton的action屬性後新增 "faces-redirect=true":
<h:form>
    <h:commandButton action="page1?faces-redirect=true" value="Page1" />
</h:form>