2009-06-19 6 views
2

Ich möchte die Fehlerseiten-Direktive von Tomcat verwenden, um verschiedene Fehlerseiten als Reaktion auf verschiedene Arten von Ausnahmen anzuzeigen. Ich möchte jedoch, dass die angezeigte Fehlerseite je nach der ursprünglichen Anfrage-URL, die zu dem Fehler geführt hat, unterschiedliche Stile und Inhalte aufweist.Anzeigen verschiedener Tomcat-Fehlerseiten abhängig von der URL der ursprünglichen Anfrage

Insbesondere habe ich einen Admin-Teil meiner Web-Anwendung und einen Benutzer Teil. Die Fehlerseiten sollten sowohl in Bezug auf das Styling als auch auf die Menüs unterschiedlich sein. Der zuverlässigste Weg, um zu unterscheiden, in welchem ​​Teil sich eine bestimmte Seite befindet, ist die Suche nach Zeichenfolgen in der URL. Ich möchte die Tomcat-Fehlerseite zum Beispiel auf ein Servlet verweisen, das die URL analysiert und auf die entsprechend formatierte Fehlerseite umleitet.

Also 1) ist es möglich, Fehler-Seite oder einen anderen Mechanismus zu verwenden, um Fehler zu einem Servlet und nicht zu einer JSP umzuleiten? (Und wenn nicht, kann ich tun, was ich mir innerhalb einer JSP vorstelle?)

und 2) sobald ich in meinem Servlet bin, kann ich die Anfrage URL bestimmen, die zu dem Fehler führte (request.requestURI doesn ' t scheint zu funktionieren - es zeigt auf die Position der Fehler-JSP selbst).

Antwort

4

Sie können das Original RequestURI erhalten von

pageContext.errorData.requestURI 

In Ihrem Fehler jsp, die Sie über <error-page> in Ihrem web.xml

http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/jsp/ErrorData.html für weitere Informationen registrieren.

Wie bei der Verwendung eines Servlets können Sie wahrscheinlich einen <jsp:forward> innerhalb des Fehlers jsp verwenden, um ihn an ein Servlet Ihrer Wahl weiterzuleiten.

+0

Jetzt sind wir irgendwo. Ich zögere, dies als beantwortet zu markieren, bis ich es probiert habe und 2) mir etwas mehr Zeit für Antworten gebe, aber das ist definitiv die Art von Information, nach der ich gesucht habe. Vielen Dank. –

+1

Arbeitete wie ein Charme (Ich tue ein c: wenn ich überprüfe, ob das requestURI bestimmte Zeichenfolgen enthält, und eine Weiterleitung wenn es tut. –

+0

Anstelle von pageContext.errorData.requestURI musste ich pageContext.getErrorData() verwenden. GetRequestURI() – jackocnr

0

Die Tomcat-Fehlerseite ist der letzte Ausweg, um Anwendungsfehler anzuzeigen (nur für den Fall, dass Ihre Fehlerseite tatsächlich fehlschlägt). Normalerweise sollten Sie (ich würde empfehlen) eine eigene Fehlerseite erstellen, auf der Sie Fehler in einer nicht technischen Version anzeigen können Ansicht (standardmäßig) und technische Ansicht (wenn der Benutzer dies wünscht) in einer Weise, die für Ihre Benutzer geeignet ist.

+0

Fairer Punkt, und in der Tat haben wir das getan; Diese Anwendung basiert auf Spring MVC und verwendet die Spring-Ausnahmebehandlung für Fehler, die nicht lokal abgefangen und behandelt werden. Bestimmte Fehler, die außerhalb des Anwendungs- und Framework-Umfangs auftreten, treffen jedoch immer noch auf Tomcat. Der spezifische Typ, der scheinbar häufig auftritt, ist ein Syntaxfehler irgendeiner Art innerhalb einer JSP. –

+0

Stimmt, in diesem Fall sollten Sie sich auf jimrs Antwort beziehen. Wir verwenden JSP nicht, damit alles falsch passiert, wir können es fangen und anzeigen. –