Normalerweise sollten Sie den Stream nicht schließen. Der Servlet-Container schließt den Stream automatisch, nachdem das Servlet als Teil des Servlet-Anforderungslebenszyklus ausgeführt wurde.
Wenn Sie beispielsweise den Stream geschlossen haben, ist er nicht verfügbar, wenn Sie einen Filter implementiert haben .
Trotzdem passiert nichts Schlimmes, wenn Sie es schließen, solange Sie nicht versuchen, es erneut zu verwenden.
BEARBEITEN: ein weiterer Filterlink
EDIT2: adrian.tarau ist insofern richtig, als wenn Sie die Antwort ändern möchten, nachdem das Servlet seine Aufgabe erfüllt hat, sollten Sie einen Wrapper erstellen, der HttpServletResponseWrapper erweitert, und die Ausgabe puffern. Dies soll verhindern, dass die Ausgabe direkt an den Client gesendet wird, ermöglicht Ihnen jedoch auch den Schutz, wenn das Servlet den Stream schließt, gemäß diesem Auszug (Hervorhebung von mir):
Ein Filter, der eine Antwort ändert, muss
normalerweise die Antwort erfassen, bevor sie an den Client zurückgegeben wird. Der Weg, dies zu tun, besteht darin, das Servlet, das die Antwort generiert, als Ersatzstrom zu übergeben. Der Stand-In-Stream verhindert, dass das Servlet den ursprünglichen Antwortstrom schließt, wenn er abgeschlossen ist, und ermöglicht es dem Filter, die Antwort des Servlets zu ändern.
Artikel
Aus diesem offiziellen Sun-Artikel kann man schließen, dass das Schließen OutputStream
eines Servlets etwas Normales ist, aber nicht obligatorisch.
close()
, die nichts tut. Was Sie tun sollten, ist jede verschließbare Ressource zu schließen.