Deaktivieren Sie alle standardmäßigen HTTP-Fehlerreaktionsinhalte in Tomcat
Standardmäßig Tomcat sendet einige HTML-Inhalt an den client zurück, wenn es trifft auf so etwas wie einen HTTP-404. Ich weiß, dass über web.xml
eine <error-page>
konfiguriert werden können zum anpassen dieser Inhalt.
Allerdings möchte ich nur für Tomcat zu nicht, schicken Sie alles in Bezug auf Inhalt (ich würde noch gerne den status-code, natürlich). Gibt es eine Möglichkeit, auf einfache Weise konfigurieren?
Ich versuche zu vermeiden) explizit das senden leerer Inhalte auf den response-stream von meinem Servlet, und B) konfigurieren, benutzerdefinierte Fehlerseiten für eine ganze Reihe von HTTP-Fehler-Status in meinem web.xml
.
Für einige hintergrund, ich bin die Entwicklung einer HTTP-API und bin die Steuerung meiner eigenen Antwort content. Also für einen HTTP-500, zum Beispiel, ich bin bevölkern einige XML-Inhalt auf die Antwort mit Fehler-Informationen. Für Situationen wie einen HTTP-404, den HTTP Antwort-status ist ausreichend für Kunden, die Inhalte und tomcat sendet ist unnötig. Wenn es einen anderen Ansatz, ich bin offen zu hören.
Edit:
Nach weitere Untersuchung, ich kann immer noch nicht viel in der Art und Weise der Lösung. Wenn jemand definitiv sagen, dass dies nicht möglich ist, oder eine Ressource nachweisen zu können, dass es nicht funktioniert, werde ich akzeptieren, dass als Antwort und versuchen und um ihn zu arbeiten.
InformationsquelleAutor der Frage Rob Hruska | 2009-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht möchten, tomcat, zeigen eine Fehler-Seite, dann verwenden Sie nicht sendError(...). Stattdessen setStatus(...).
z.B. wenn Sie möchten, geben ein 405-Antwort, dann tun Sie
Denken Sie auch daran, nicht zu werfen Ausnahmen von Ihrem servlet. Statt die Ausnahme abzufangen und wieder, setzen Sie den statusCode Ihrer selbst.
d.h.
natürlich, wenn Sie nicht möchten, dass Inhalte, dann eben nicht alles schreiben, der Schriftsteller, nur der status gesetzt.
InformationsquelleAutor der Antwort
Obwohl dies nicht genau zu reagieren, um das "nicht-senden-alles" - Aussage auf die Frage, und auf der Welle der Clive Evans' Antwortfand ich heraus, dass in tomcat können Sie diese zu sehr ausführlichen Texte gehen Weg von Fehler-Seiten ohne erstellen einer benutzerdefinierten ErrorReportValve.
Können Sie erreichen, um diese customizing-ErrorReportValve durch die 2 params "showReport" und "showServerInfo" auf Ihrem "server.xml":
Link zur offiziellen Dokumentation.
Arbeitete für mich auf tomcat 7.0.55, hat nicht funktioniert für mich auf tomcat 7.0.47 (ich denke da an etwas berichtet auf den folgenden link http://www.mail-archive.com/[email protected]/msg113856.html)
InformationsquelleAutor der Antwort reallynice
Als Heikki gesagt, die Einstellung der status, anstatt
sendError()
bewirkt, dass der Tomcat nicht berühren Sie die Antwort-Entität/Körper/Nutzlast.Wenn Sie nur wollen, senden Sie die Antwort-Header ohne jede Entität, wie in meinem Fall,
funktioniert der trick. Mit
Content-Length: 0
dieprint()
keine Wirkung, selbst wenn verwendet, wie:erhält der Kunde so etwas wie:
Wenn Sie möchten, senden einige Fehlermeldung, verwenden Sie den
setContentLength()
mit message-Länge (ungleich null) oder Sie können lassen Sie es auf den serverInformationsquelleAutor der Antwort manikanta
Schnell, leicht verschmutzt, aber leicht Weg zu stoppen Tomcat sendet Fehler Körper ist zu nennen, setErrorReportValveClass gegen die tomcat-host, mit dem ein benutzerdefinierter Fehler-Bericht Ventil überschrieben Bericht nichts zu tun. ie:
und legen Sie es mit:
Wenn Sie möchten, um Ihre Nachricht zu senden, und denke nur, Tomcat sollte nicht mit Zohan an, Sie wollen etwas entlang der Linien von:
InformationsquelleAutor der Antwort Clive Evans
Obwohl es Servlet-spec-kompatibel, für Sicherheit Gründe, warum ich nicht wollen, tomcat oder anderen Servlet-container, der zum senden von Fehler-details. Ich kämpfte mit diesem auch ein wenig. Nach der Suche und versuchen, die Lösung kann wie folgt zusammengefasst werden:
sendError()
verwendensetStatus()
stattsendError()
obwohl...- Filter
dassein. leitet Anrufe um
sendError()
zusetStatus()
b. spült die Antwort am Ende um zu verhindern, dass die container von der weiteren Modifizierung der Reaktion
Ein kleines Beispiel-servlet-filter dies zu tun, kann hier gefunden werden.
InformationsquelleAutor der Antwort Erich Eichinger
Warum nicht einfach konfigurieren der
<error-page>
element mit einer leeren HTML-Seite?InformationsquelleAutor der Antwort matt b
Aber diese Frage ist ein bisschen alt, ich lief in dieses problem auch. Zuerst von allen, Tomcat Verhalten ist absolut korrekt. Dies ist pro Servlet Spec. Sollte man nicht verändern, Tomcat Verhalten gegen die spec. Als Heikki Vesalainen und mrCoder erwähnt, verwenden
setStatus
undsetStatus
nur.To, wen es betreffen kann, ich habe erhöht einen ticket mit Tomcat zu verbessern, die docs von
sendError
.InformationsquelleAutor der Antwort Michael-O