Wie gebe ich die Standardfehlerseite in web.xml an?

138

Ich verwende das <error-page>Element in web.xml , um die freundliche Fehlerseite anzugeben, wenn der Benutzer auf einen bestimmten Fehler stößt, z. B. einen Fehler mit dem Code 404:

<error-page>
        <error-code>404</error-code>
        <location>/Error404.html</location>
</error-page>

Ich möchte jedoch, dass der Benutzer <error-page>eine Standardfehlerseite sehen sollte , wenn er keinen in angegebenen Fehlercode erfüllt . Wie kann ich das mit dem Element in der web.xml machen ?

ipkiss
quelle
2
Welchen Servletcontainer verwenden Sie / Targeting und für welche Servlet-Version sind Sie web.xmldeklariert? Es gibt nur seit Servlet 3.0 einen einfachen Weg.
BalusC
Ich benutze Tomcat 6, Servlet 2.5
ipkiss

Antworten:

240

Auf Servlet 3.0 oder neuer können Sie einfach angeben

<web-app ...>
    <error-page>
        <location>/general-error.html</location>
    </error-page>
</web-app>

Da Sie sich jedoch noch in Servlet 2.5 befinden, gibt es keine andere Möglichkeit, als jeden häufigen HTTP-Fehler einzeln anzugeben. Sie müssen herausfinden, mit welchen HTTP-Fehlern der Endbenutzer möglicherweise konfrontiert sein könnte. Auf einer Barebone-Webanwendung mit beispielsweise der Verwendung der HTTP-Authentifizierung, einer deaktivierten Verzeichnisliste, der Verwendung von benutzerdefinierten Servlets und Code, die möglicherweise nicht behandelte Ausnahmen auslösen können oder nicht alle Methoden implementiert haben, möchten Sie sie für HTTP-Fehler 401 festlegen 403, 500 bzw. 503.

<error-page>
    <!-- Missing login -->
    <error-code>401</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Forbidden directory listing -->
    <error-code>403</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Missing resource -->
    <error-code>404</error-code>
    <location>/Error404.html</location>
</error-page>
<error-page>
    <!-- Uncaught exception -->
    <error-code>500</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Unsupported servlet method -->
    <error-code>503</error-code>
    <location>/general-error.html</location>
</error-page>

Das sollte die häufigsten abdecken.

BalusC
quelle
Können Sie eine allgemeine Fehlerseite angeben und dann bestimmte Fehlercodes mit dem <error-code>Tag überschreiben ?
Qix - MONICA wurde am
6
@Tomas: Tomcat Jungs hatten das gleiche Problem wie Sie. Dies wird in der Spezifikation nirgends wörtlich erwähnt, nur Abbildung 14-10 in der Spezifikation und die web.xmlXSD-Datei beweisen dies <error-code>und <exception-type>wurden optional anstatt erforderlich. Siehe Ausgabe 52135 .
BalusC
java.sun.com/xml/ns/javaee/web-app_2_5.xsd gibt kein <description> untergeordnetes Element für das <error-page> -Element an. Das Einfügen des obigen Codes in eine Servlet 2.5-Datei web.xml führt daher zu XSD Validierungsfehler. Wenn ich sie jedoch kommentiere, funktioniert es gut, danke!
László van den Hoek
1
@BalusC: Wo soll die Seite general-error.html (in Ihrer Antwort erwähnt) in WEB-INF platziert werden? Ich habe ein seltsames Problem mit Servlet 2.5, bei dem ich für HTTP-Fehler 403 eine <Fehlerseite> -Definition erstellt habe und die Seite error403.jsp im WEB-INF gespeichert ist. Aus diesem Grund wird die Seite error403.jsp geladen, wenn welche vorhanden ist Es wird versucht, auf die Ressourcen zuzugreifen, aber Bilder und CSS in error403.jsp werden nicht geladen, sodass die Seite verlegt aussieht.
Jayy
@Kaipa: Verwenden Sie einfach URL-relative Pfade anstelle von Webinhalts-relativen Pfaden zu CSS / JS / Bildressourcen. Viele Starter denken fälschlicherweise, dass diese Ressourcen serverseitig aufgelöst werden, aber sie sind tatsächlich clientseitig aufgelöst. Siehe auch stackoverflow.com/questions/3655316/…
BalusC
23

Sie können auch so etwas tun:

<error-page>
    <error-code>403</error-code>
    <location>/403.html</location>
</error-page>

<error-page>
    <location>/error.html</location>
</error-page>

Für den Fehlercode 403 wird die Seite 403.html zurückgegeben, und für jeden anderen Fehlercode wird die Seite error.html zurückgegeben.

Kerl
quelle
8

Sie können <error-page>Ausnahmen auch angeben <exception-type>, z. B.:

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/errorpages/exception.html</location>
</error-page>

Oder ordnen Sie einen Fehlercode zu <error-code>:

<error-page>
    <error-code>404</error-code>
    <location>/errorpages/404error.html</location>
</error-page>
Aniket Sahrawat
quelle