Я имел ту же проблему и случайным образом делал такие вещи как (несколько раз):
1) Проект-> Чистый...,
2) близко и открывают Eclipse снова,
3) Выполнение Как...
И это начало работать снова, не изменяя конфигурацию.
Да, закрывает. Что касается того, следует ли вам закрыть его - ожидаете ли вы что-нибудь еще записать в поток ответов? Если нет, думаю, можно закрыть. Если вы не закроете его, вам, очевидно, следует вместо этого промыть его - но я подозреваю, что вы могли бы выяснить это для себя :)
На самом деле поведение унаследовано от FilterOutputStream
. В документации Javadocs для FilterOutputStream.close
указано:
вызывает свой метод flush, а затем вызывает
метод закрытия лежащего в его основе
выходной поток.
Что касается того, следует ли его буферизовать - я не уверен, что это четко определено. Он может быть где-то похоронен в спецификации сервлета - и он может даже быть настраиваемым (иногда вам действительно не нужна буферизация, но если вы можете буферизовать весь ответ, это означает, что вы можете обслуживать более удобную страницу с ошибкой, если что-то пойдет не так после вас '' он начал писать).
Закрытие BufferedOutputStream также закроет базовый OutputStream. Вы должны закрыть BufferedOutputStream, чтобы он сбрасывал свое содержимое перед закрытием базового потока. Чтобы убедиться в этом, посмотрите реализацию FilterOutputStream.close () (из которой расширяется BufferedOutputStream)
Я предполагаю, что будет ли буферизован поток ответа, переданный вашему сервлету, или нет, зависит от реализации вашего контейнера сервлетов. FWIW Я знаю, что Tomcat по умолчанию буферизует потоки ответов сервлетов, чтобы попытаться установить HTTP-заголовок длины содержимого.