Ответ 1
Вам действительно не нужно это делать.
Правило большого пальца: если вы не создали/не открыли его самостоятельно, используя new SomeOutputStream()
, вам не нужно его закрывать самостоятельно. Если это было, например, new FileOutputStream("c:/foo.txt")
, вам, очевидно, нужно закрыть его самостоятельно.
Причины того, что некоторые люди все еще это делают, - это просто гарантировать, что больше ничего не будет написано в орган ответа. Если это произойдет, то это приведет к IllegalStateException
в журналах приложений, но это не повлияет на клиента, поэтому клиент все равно получит правильный ответ. Это также более легкий отладчик, чтобы выявить потенциальные проблемы в цепочке запроса-ответа, которые вы не увидели бы на первый взгляд. Например, что-то еще добавляет больше данных в тело ответа где-то дальше в цепочке.
Другая причина, которую вы видите среди стартеров, заключается в том, что они просто хотели предотвратить, чтобы больше данных было записано в тело ответа. Вы часто это видите, когда JSP неправильно играет роль в ответе. Они просто игнорируют IllegalStateException
в журналах. Излишне говорить, что эта конкретная цель плоха.