Зазвичай ви не повинні закривати потік. Контейнер сервлета автоматично закриє потік після закінчення запуску сервлета як частини життєвого циклу запиту сервлета.
Наприклад, якщо ви закрили потік, він не буде доступний, якщо ви застосуєте фільтр .
Сказавши все це, якщо ви закриєте це, нічого поганого не станеться до тих пір, поки ви не спробуєте використовувати його знову.
EDIT: ще одне посилання на фільтр
EDIT2: adrian.tarau вірно в тому, що якщо ви хочете змінити відповідь після того, як сервлет зробив свою справу, вам слід створити обгортку, що розширює HttpServletResponseWrapper і буфер виводу. Це унеможливлює прямий вихід безпосередньо до клієнта, але також дозволяє захистити, якщо сервлет закриває потік, згідно з цим уривком (моє наголос):
Фільтр, який модифікує відповідь, зазвичай повинен
фіксувати відповідь, перш ніж її повернути клієнту. Спосіб зробити це - передати сервлет, який генерує відповідь, потоком очікування. Потік очікування не дозволяє сервлету закривати вихідний потік відповідей, коли він завершується, і дозволяє фільтру змінювати відповідь сервлета.
Стаття
З цієї офіційної статті Sun можна зробити висновок, що закриття OutputStream
сервлета - це звичайне явище, але не є обов'язковим.
close()
що нічого не робить. Що ви повинні зробити, це закрити кожен доступний ресурс.