2010-12-08 3 views
6

Ich habe eine JSP-Seite (in Tomcat), die JSP-Tags verwendet, um einige Daten abzurufen. Diese JSP-Tags können jedoch Ausnahmen auslösen (z. B. wenn Parameterwerte ungültig sind). Jetzt möchte ich eine bessere Fehlerbehandlung für diese Situation implementieren. Es ist mir nicht gelungen, einen Ausnahmebehandler zu finden, der GLOBALLISCH spezifiziert (die Fehlerseitendefinitionen in web.xml funktionieren nicht für Ausnahmen, die in einer JSP ausgelöst werden). Die einzige Möglichkeit, die ich bisher gefunden habe, ist die Angabe eines errorPage-Attributs in der Kopfzeile aller JSP-Dateien.So legen Sie HTTP-Statuscode in JSP-Fehlerhandlern fest

<% page errorPage="/WEB-INF/jsp/errors/500.jsp" %> 

Ziemlich nervig, dies für alle JSPs zu tun, aber akzeptabel. Aber nicht akzeptabel ist die Tatsache, dass die Fehlerseite immer mit einem HTTP-Statuscode von 200 ausgeliefert wird. Ich möchte stattdessen eine 500. Ich habe versucht, ein Servlet als errorPage anstelle einer JSP und versucht, response.setStatus (500) und auch response.sendError (500) zu setzen, aber beide Aufrufe werden ignoriert. So dieser Code druckt „200“ zwei Mal und ich habe keine Ahnung, warum:

System.out.println(response.getStatus()); 
response.setStatus(500); 
System.out.println(response.getStatus()); 

Die Frage ist also: Wie kann ich den HTTP-Statuscode in JSP Fehler-Handler gesetzt?

Antwort

4

Sie können Ihre Fehlerseiten unter web.xml konfigurieren.

<error-page> 
     <error-code> 
      500 
     </error-code> 
     <location> 
      /500.jsp 
     </location> 
    </error-page> 

in Ihrem 500.jsp, setzen die Richtlinie als <%@ page isErrorPage="true" %>

+1

Wie ich schrieb: Fehler-Seite Definitionen in web.xml funktionieren nicht für JSPs. Ich habe bereits genau diese Zeilen in web.xml, um in Servlets ausgelöste Ausnahmen abzufangen, und es funktioniert dort gut, aber mein Problem ist die Ausnahmebehandlung in JSP, nicht in Servlet. – kayahr

2

Statt setStatus(500), Sie besser sendError(500) verwenden würde - es einige Unterschiede gibt. Die config in web.xml funktioniert gut mit sendError, aber wenn Sie nicht möchten, dass die Konfiguration in web.xml, error-page von Seite Direktive nur für Ausnahmen für mich funktioniert, nicht für HTTP-Fehlercodes.

Verwandte Themen