2010-01-15 146 views
1

我在test1.jsp上有2個jsp頁面test1.jsp和test2.jsp我發佈了一些數據,它將重定向到test2.jsp。但從test2.jsp如果我點擊ie瀏覽器後退按鈕,那麼它顯示網頁已過期頁,所以我應該如何繼續顯示test1.jsp上後退按鈕單擊?我在IE瀏覽器中遇到這個問題。jsp上的IE後退按鈕問題

回答

2

因此,您實際上並未重定向請求,而只是請求(並轉發)請求。只要您嘗試從瀏覽器歷史記錄中獲取非緩存的POST請求,您就會收到此錯誤頁面。

您需要POST後實際重定向請求。這被稱爲POST-Redirect-GET pattern。假設你的web應用的設計很好,您使用的是Servlet控制,預處理和後處理的要求,那麼所有你需要做的就是調用HttpServletResponse#sendRedirect()而不是RequestDispatcher#forward()

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // Postprocess request parameters here. 

    // Finally redirect POST request to a brand new GET request. 
    response.sendRedirect("result.jsp"); 
} 

這樣,POST請求贏得在瀏覽器歷史記錄中不會被採納。按下後退按鈕不會再獲得POST請求,而是在之前調用的請求(即用於使用表單打開/查看頁面的請求)。

唯一需要注意的是,初始請求,包括其所有參數和屬性都將消失,以至於無法在結果頁面中使用它們。如有必要,您可以使用會話作用域或重定向URL中的查詢字符串/路徑信息來解決此問題。

這個特殊的「問題」是順便說一句,不是MSIE特有的。其他瀏覽器會表現相同,但它們只會給出不同的錯誤/警告消息。未來,在明確指出MSIE爲根本原因之前,請使用不同的瀏覽器進行測試。

+0

僅供參考:在firfox中工作正常 – 2010-01-18 10:52:49