2012-03-25 5 views
3

Zunächst einmal, lassen Sie mich sagen, dass ich kein Java-Programmierer oder sehr vertraut mit Tomcat bin so bitte mit mir :) Ich arbeite mit eine SaaS-Anwendung, die auf Apache Tomcat 5.0.9 ausgeführt wird. Ich habe weder Zugriff auf die Serverkonfigurationsdateien noch kann ich .jsp-Dateien hinzufügen.Tomcat 5.0.9 Überschreibung 404 Fehlerseite Erklärung ohne Zugriff auf Server - brauchen benutzerdefinierte 404 Nachricht

Die Situation, die ich in bin, ist habe ich ein Skript, das in einer Mozilla Rhino-Umgebung ausgeführt wird, und ich habe Zugriff auf die folgenden zwei Objekte:

org.apache.coyote.tomcat5.CoyoteRequestFacade org.apache. coyote.tomcat5.CoyoteResponseFacade

Ich muss den Status auf SC_NOT_FOUND (404) setzen und eine benutzerdefinierte Nachricht bereitstellen. Das Problem ist, egal, was ich tue, wenn der Status 404 ist, bekomme ich eine "hässliche" 404 Fehlermeldung, wie vom Verkäufer festgelegt. Ich habe versucht, mit "sendError", "setStatus", ich habe versucht, den Dispatcher und umleiten auf eine andere Seite, während auch den Status auf 404, ich habe einen Wrapper, aber nicht sicher, was ich tue, und ich ' Ich habe Informationen über Filter gesehen, weiß aber nicht, wie ich das in dieser Situation anwenden soll oder ob das der richtige Ansatz ist.

Wieder scheint es, dass sobald der 404 gesetzt ist, der Webserver seine eigene Seite aufruft. Ich gehe davon aus, dass dies eine "Fehlerseite Erklärung" ist, die ich nicht überschreiben kann. Ich habe diese Frage durchgelesen How to get the message in a custom error page (Tomcat)? (und viele andere), aber ich verstehe das nicht genug, um die Informationen auf meine spezielle Situation zu übertragen.

Ist es also möglich, eine Fehlerseiten-Deklaration programmatisch zu "überschreiben"? Oder, wie kann ich eine 404 Fehler und eine benutzerdefinierte Fehlerseite angesichts der Beschränkungen der Umgebung, in der ich bin, zurückgeben? Ich würde mich an dieser Stelle für reinen Text entscheiden - muss nicht schick sein. Ich brauche nur einen Weg, um den 404-Status und eine "benutzerfreundliche" Nachricht anzuzeigen.

Jede Hilfe würde sehr geschätzt werden!

P.S. Ich sollte erwähnen, dass der Grund für diesen Ansatz darin besteht, dass die fragliche Seite (potentiell) von einer Suchmaschine und Menschen konsumiert wird. Ich brauche die 404, so dass die Suchmaschine die Seite aus ihrem Cache entfernt und ich brauche die "hübsche" Nachricht, um dem menschlichen Besucher zu sagen, welche Schritte sie wegen der nicht mehr verfügbaren Seite unternehmen müssen.

Antwort

2

Tomcat interpretiert Ihren 404-Status und zeigt die Standardfehlerseite mit Ihrer Fehlermeldung oder Stacktrace an. Wenn

response.sendError(404, "Your error message here") verwendet, ist nicht für Sie arbeitet, dann müssen Sie bei Verwendung von benutzerdefinierten Fehlerseite finden - http://wiki.apache.org/tomcat/FAQ/Miscellaneous#Q6, aber dies beruht auf der Tatsache, dass Sie die web.xml ändern können - seomthing Sie sagen, Sie nicht in der Lage sind zu tun.

Nun könnte man einen ok HTTP-Statuscode zurück (200), und die ziemlich formatiert Fehler Inhalt

angezeigt werden, wenn der Client die Antwort raubend mit einem Menschen nur ein Browser angebracht ist, dann werden sie keine sein der Klügere.

Auf der anderen Seite, wenn der Client, der es verbraucht, eine Maschine irgendeiner Art (Skript, ein anderes Programm usw.) ist und sie Logik basierend auf dem Antwortcode ausführen, dann ist dies keine gute Lösung für Sie als durch die Rückgabe eines 200 Status-Code, Sie sagen, alles ging gut (anstatt eines Fehlercodes - 4xx oder 5xx)

+0

Vielen Dank dafür! Ich hätte erwähnen sollen, dass der 404 sowohl von einer Maschine als auch von Menschen verbraucht wird, weshalb ich beides brauche.Ich brauche die 404, also entfernt die Maschine die Seite aus ihrem Cache, aber wenn ein Mensch sie liest, brauche ich eine "hübsche" Nachricht. Ich werde meine Frage aktualisieren. –

+0

Wenn Sie web.xml nicht ändern können, glaube ich nicht, dass Sie die Tomcat-Standardfehlerseite ersetzen können –