Обычно вам не следует закрывать поток. Контейнер сервлета автоматически закроет поток после завершения работы сервлета в рамках жизненного цикла запроса сервлета.
Например, если вы закроете поток, он будет недоступен, если вы реализовали фильтр .
Сказав все это, если вы закроете его, ничего плохого не произойдет, если вы не попытаетесь использовать его снова.
РЕДАКТИРОВАТЬ: еще одна ссылка на фильтр
EDIT2: adrian.tarau верен в том, что если вы хотите изменить ответ после того, как сервлет сделал свое дело, вы должны создать оболочку, расширяющую HttpServletResponseWrapper, и буферизовать вывод. Это сделано для того, чтобы вывод не поступал напрямую клиенту, но также позволяет защитить, если сервлет закроет поток, как указано в этом отрывке (выделено мной):
Фильтр, изменяющий ответ, обычно должен
захватить ответ, прежде чем он будет возвращен клиенту. Для этого нужно передать сервлету, который генерирует ответ, резервный поток. Резервный поток предотвращает закрытие сервлетом исходного потока ответов после его завершения и позволяет фильтру изменять ответ сервлета.
Статья
Из этой официальной статьи Sun можно сделать вывод, что закрытие OutputStream
сервлета из сервлета - это нормальное явление, но не обязательное.
close()
, который ничего не делает. Что вы должны сделать , это близко каждый закрываемой ресурс.