2013-03-10 133 views
6

我在doFilter()方法中有以下代碼,其中我獲得了應用程序作用域bean。HttpServletResponse.sendError()不重定向到錯誤頁面

if (request.getServletContext().getAttribute("resource")==null) { 
     response.sendError(503); 
     return; 
    } 

我將503代碼映射到web.xml中的特定錯誤頁面。如果發生錯誤,我真的會在瀏覽器中獲得錯誤頁面的內容。但地址欄中的地址不會因錯誤頁面地址而發生變化:請求的servlet的地址將留在那裏。這是正確的行爲?我想明確告知重定向到錯誤頁面。 它是唯一可能與sendRedirect()?

+2

爲什麼要更改網址?你爲什麼要讓你的錯誤頁面公開訪問?規範的方法是將它們保存在'/ WEB-INF'文件夾中並讓容器轉發它。重定向只會完全打破狀態代碼,並通過返回3nn/2nn來誤導瀏覽器和searchbots的發生。只要做**不**重定向到錯誤頁面! – BalusC 2013-03-14 03:50:03

回答

3

這是正確的行爲。當你使用sendError()時,它會以錯誤頁面響應當前的請求。如果您希望URL更改爲錯誤頁面URL,則需要使用sendRedirect()以重定向進行響應。