2013-03-10 14 views
6

Ich habe den folgenden Code in der Methode doFilter(), wo ich Application-Bean Bean.HttpServletResponse.sendError() wird nicht auf Fehlerseite umgeleitet

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

Ich habe Code 503 auf bestimmte Fehlerseite in web.xml zugeordnet. Und ich erhalte wirklich Inhalt der Fehlerseite im Browser, wenn ein Fehler auftritt. Die Adresse in der Adressleiste ändert sich jedoch nicht für die Adresse der Fehlerseite. Eine Adresse des angeforderten Servlets bleibt dort. Ist es richtiges Verhalten? Ich möchte explizit über die Umleitung auf die Fehlerseite informieren. Ist das nur mit sendRedirect() möglich?

+2

Warum möchten Sie die URL ändern? Warum möchten Sie, dass Ihre Fehlerseiten öffentlich zugänglich sind? Der kanonische Ansatz besteht darin, sie im Ordner '/ WEB-INF' zu belassen und den Container an ihn weiterzuleiten. Eine Umleitung würde den Statuscode nur komplett brechen und die Browser und Suchroboter über das Geschehen irreführen, indem eine 3nn/2nn zurückgegeben wird. Nur ** nicht ** umleiten auf die Fehlerseite! – BalusC

Antwort

3

Dies ist das korrekte Verhalten. Wenn Sie sendError() verwenden, wird auf die aktuelle Anfrage mit einer Fehlerseite reagiert. Wenn Sie stattdessen möchten, dass die URL zur URL der Fehlerseite wechselt, müssen Sie sendRedirect() verwenden, um mit einer Weiterleitung zu antworten.

Verwandte Themen