<error-Seite> - tag in web.xml nicht zu fangen in java.lang.Throwable Exceptions
Ich habe eine web-app entwickelt, mit der servlet - & JSP. Ich konfigurierte meine app zu werfen, ein IllegalArgumentException
wenn ich einfügen bad Parameter.
Dann konfigurierte ich meine web.xml Datei in dieser Art:
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
Wenn ich den Aufstieg 404 error
, dann funktioniert es und ruft error.jsp
, aber wenn ich den Aufstieg java.lang.IllegalArgumentException
, dann funktioniert es nicht und ich habe ein blank page
statt error.jsp
. Warum?
Ist der server Glassfish, und die logs zeigen wirklich IllegalArgumentException aufblühte.
Das ist merkwürdig. Vielleicht sind Sie fangen die IllegalArgumentException irgendwo in Ihrem code?
ja, ich fangen Sie die Ausnahme in einem catch im java-code... kann es das problem sein?
Wenn Sie schon fing es in Ihrem code, dann wird der server genannt, der code wird nicht abrufen. So einfach ist das. Entfernen Sie einfach die zu fangen und lasst Sie gehen, oder rethrow die Ausnahme gefangen.
ja, ich fangen Sie die Ausnahme in einem catch im java-code... kann es das problem sein?
Wenn Sie schon fing es in Ihrem code, dann wird der server genannt, der code wird nicht abrufen. So einfach ist das. Entfernen Sie einfach die zu fangen und lasst Sie gehen, oder rethrow die Ausnahme gefangen.
InformationsquelleAutor andPat | 2013-04-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht fangen und unterdrücken es, aber lass es einfach gehen.
I. e. tun Sie nicht:
Sondern lass es einfach gehen:
Oder, wenn Sie tatsächlich intented, um es zu fangen, für die Anmeldung oder so (ich würde lieber einen filter verwenden, aber ala), dann rethrow:
Oder, wenn es sich nicht um eine Laufzeit-exception, dann rethrow es eingewickelt in
ServletException
es werden automatisch ausgepackt werden, indem der container:Siehe auch:
InformationsquelleAutor BalusC
Habe ich heute das gleiche Problem. (Java ee 7 und Glassfish 4.0)
Scheint das problem, dass der Rahmen prüfen Sie es als String anstatt mit der Klasse.
String-basierte check (die Hypothese)
Wenn eine Ausnahme twrown,
e.getClass()
ist im Vergleich mit<exception-type>
als string.So können Sie nicht verwenden Sie Vererbung.
Beachten Sie, dass verschachtelte Klassen werden müssen, spitz wie '$' statt '.' (gleiche wie getClass () - Methode).
Klasse basiert überprüfen
Rahmen erstellen Sie eine Instanz der Klasse, und
<exception-type>
text beziehen, und dieclass.isInstance()
verwendet wird, zu prüfen.Diese müssen Reflexion und policy-Datei könnte es zu brechen.
Ich hoffe, dass diese Antwort löst künftige Probleme.
InformationsquelleAutor Victor Arribas