2012-03-29 9 views
0

Ich habe JSP-Seite mit einigen EL innerhalb. Leider löst EL-Ausdrücke eine Ausnahme aus. Als Ergebnis Benutzer sieht die Hälfte der Seite, während System protokolliert Ausnahme und sendet meine E-Mail.Senden 500 Fehler für jede JSP-Ausnahme

Ist es möglich, container (tomcat) so zu konfigurieren, dass die jsp-Seite zuerst verarbeitet wird, und THEN dann dem Benutzer anzeigen und im Fehlerfall eine 500-Fehlerseite anzeigen?

Fehlerseite ist viel besser als teilweise gerenderte Seite.

Ja, ich weiß, dass Template Engine Viewmodel verarbeiten sollte, die nur Accessors/Mutatoren und keine Ausnahme ausgelöst werden soll, aber für den Moment muss ich auf einige Business (Domänenmodell) -Objekte in EL zugreifen.

Antwort

0

könnten Sie JSTL verwenden

<c:catch> 

Tag. Ein Beispiel:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<c:catch var="exp"> 
      ${.} 
</c:catch> 
<c:if test="${exp != null}" > 
     Expection was thrown in EL 
</c:if> 
+0

Das wird nichts helfen. OPs konkretes Problem ist, dass die Antwort bereits an dem Punkt ausgelöst wurde, an dem die Ausnahme ausgelöst wurde. Andernfalls sollte der Servletcontainer bereits die Standardfehlerseite in seiner Gesamtheit angezeigt haben. – BalusC

+0

@BalusC Sie haben Recht. Er sollte seinen Code aufräumen. Das macht am meisten Sinn. Aber er schien verzweifelt etwas arbeiten zu lassen. Ich habe hier oben den Code bearbeitet, den ich vorgeschlagen habe. – rickz

+0

Eine weitere verrückte Idee: Vergrößerung der Ausgabepuffergröße. Vielleicht würde die Antwort so lange dauern, bis die ganze Seite fertig war (oder zuerst eine Ausnahme auslösen). – rickz

1

EL Ausdruck Evaluationen sollen keine Ausnahmen werfen.

Wenn dies passiert, dann kann das nur bedeuten, dass Sie einen Fehler in Ihrem Vorverarbeitungscode oder in der Art, wie Ihre Getter-Methoden entwickelt werden.

Der Vorverarbeitungscode (gelesen: das Front-Controller-Servlet) muss unbedingt sicherstellen, dass alle Daten, auf die die Seite zugreifen muss/vorhanden ist, bereits im Gültigkeitsbereich enthalten sind. Die Getter-Methoden, auf die sich die EL-Ausdrücke beziehen, dürfen nur eine bereits vorbereitete/geladene Eigenschaft zurückgeben.

0

Sie können eine 500-Fehler-Seite für Ihre Anwendung mit web.xml konfigurieren.

<error-page> 
    <error-code>500</error-code> 
    <location>/WEB-INF/error-pages/500.jsp</location> 
</error-page> 

Setzen Sie diese in <web-app>...</web-app> der web.xml-Datei. Für jede serverseitige Ausnahme wird der Benutzer umgeleitet auf 500.jsp Seite

+0

Ich denke, du hast OP's konkretes Problem nicht verstanden wie Rickz. Ich kann jedoch Ihr Missverständnis verstehen, da OP eine schlechte Praxis praktiziert, in Getter-Methoden hinter EL-Ausdrücken einen Ausnahme-sensitiven Business-Job zu machen, was nicht jeder erwartet. – BalusC

+0

Ah! was mein Glück heute! Guten Morgen @BalusC Herr! Ja, ich habe die Frage zu diesem Zeitpunkt richtig gelesen. Was ich jetzt fühle, meine Antwort ist nicht auf den Punkt der Frage, aber es schlägt eine Lösung für "Server-seitigen Fehler" vor. Danke für das Clearing.Einen schönen Tag noch :) – tusar

+0

OP ** schon ** hat eine Fehlerseite (auch wenn er keinen hatte, der Servletcontainer hat noch einen Default). Das konkrete Problem ist, dass es nicht angezeigt wird, da die Antwort bereits festgeschrieben ist. Lesen Sie den ersten Absatz der Frage erneut vollständig durch. – BalusC