Ich habe zwei Fehlerseiten; 1 ist für SpecificExceptionA und das andere ist für Throwable.
%Vor%Wenn ich beides in meiner web.xml definiert habe, geht alles nach /error/error.jsp.
Wenn ich nur die spezifische Ausnahme definiert habe, geht es auf die richtige Seite; aber andere Fehler gehen zum Tomcat-Standard (außer 404)
Gibt es eine bessere Möglichkeit, bestimmte Ausnahmehandler anzugeben? Ich benutze Frühling 3.0.
Dies ist nicht spezifisch für Tomcat. Dies ist spezifisch für die Servlet-API. Wie die Fehlerseite ermittelt wird, ist in Kapitel 9.9.2 der Servlet-API-Spezifikation 2.5 angegeben. Hier ist ein Auszug von Relevanz:
SRV.9.9.2 Fehlerseiten
Wenn keine
error-page
-Deklaration, die einexception-type
enthält, zur Verwendung des Klassenhierarchie-Übereinstimmung, und die ausgelöste Ausnahme istServletException
oder Unterklasse davon extrahiert der Container die umgebrochene Ausnahme, wie durch definiert die MethodeServletException.getRootCause
. Ein zweiter Durchlauf wird über den Fehler gemacht Seitendeklarationen versuchen erneut die Übereinstimmung mit der Fehlerseite Deklarationen, sondern stattdessen die Wrapped-Exception.
Also wurde Ihre SpecificExceptionA
wahrscheinlich in eine ServletException
und somit ist java.lang.Throwable
die beste Übereinstimmung im 1. Durchgang. Wenn Sie diesen Eintrag entfernen, wird ein zweiter Durchgang mit der eingepackten Ausnahme durchgeführt, und Ihre SpecificExceptionA
erhalten eine Übereinstimmung.
Der richtige Weg, um eine allgemeine HTTP 500-Fehlerseite zu definieren, besteht darin, sie auf error-code
anstelle von exception-type
:
Wenn dies aus einem unklaren Grund keine Option ist, besteht eine der Möglichkeiten zur Umgehung darin, ein Filter
zu erstellen, das auf einem url-pattern
von /*
lauscht und im Wesentlichen Folgendes ausführt:
Es muss nur von RuntimeException
erweitert werden, damit es funktioniert.
Ich habe die Springs SimpleMappingExceptionResolver-Klasse verwendet
%Vor%Tags und Links jsp tomcat spring-mvc servlets custom-error-pages