2013-03-10 21 views
6

Mam następujący kod w metodzie doFilter(), gdzie dostaję komponent o zakreślonej skali.HttpServletResponse.sendError() nie przekierowuje do strony błędu

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

Zmapowałem 503 kod do określonej strony błędu w web.xml. I naprawdę dostaję zawartość strony błędu w przeglądarce, jeśli wystąpi błąd. Ale adres w pasku adresu nie zmienia adresu strony błędu: adres żądanego serwletu pozostawia tam. Czy to właściwe zachowanie? Chciałbym wyraźnie poinformować o przekierowaniu na stronę błędu. Czy jest to możliwe tylko z sendRedirect()?

+2

Dlaczego chcesz zmienić adres URL? Dlaczego chcesz, aby Twoje strony z błędami były publicznie dostępne? Kanoniczne podejście polega na przechowywaniu ich w folderze '/ WEB-INF' i przepuszczaniu kontenera do niego. Przekierowanie spowodowałoby jedynie całkowite złamanie kodu statusu i wprowadzenie w błąd przeglądarek i wyszukiwarek o zdarzeniu poprzez zwrócenie 3nn/2nn. Po prostu nie ** nie ** przekierowuj do strony błędu! – BalusC

Odpowiedz

3

To jest prawidłowe zachowanie. Gdy użyjesz sendError(), odpowie na bieżące żądanie ze stroną błędu. Jeśli zamiast tego chcesz, aby URL zmieniał się na adres URL strony błędu, musisz użyć metody sendRedirect(), aby odpowiedzieć przekierowaniem.

Powiązane problemy