Вы должны закрыть поток, код будет чище, так как вы вызываете getOutputStream (), и поток не передается вам в качестве параметра, когда обычно вы просто используете его и не пытаетесь закрыть его. Servlet API не утверждает, что если выходной поток может быть закрыт или не должен быть закрыт, в этом случае вы можете безопасно закрыть поток, любой контейнер позаботится о закрытии потока, если он не был закрыт сервлетом.
Вот метод close () в Jetty, они закрывают поток, если он не закрыт.
public void close() throws IOException
{
if (_closed)
return;
if (!isIncluding() && !_generator.isCommitted())
commitResponse(HttpGenerator.LAST);
else
flushResponse();
super.close();
}
Также как разработчик фильтра вы не должны предполагать, что OutputStream не закрыт, вы всегда должны передавать другой OutputStream, если вы хотите изменить содержимое после того, как сервлет выполнил свою работу.
РЕДАКТИРОВАТЬ: Я всегда закрываю поток, и у меня не было никаких проблем с Tomcat / Jetty. Я не думаю, что у вас должны быть какие-либо проблемы с любым контейнером, старым или новым.