Что происходит с выходным потоком, когда я отправляю файл из сервлета в браузер? - PullRequest
1 голос
/ 28 июля 2011

У меня есть приложение, которое пользователи используют для загрузки некоторых файлов, которые, к сожалению, извлекаются через веб-сервис. Веб-сервис предоставляет содержимое файлов внутри полезной нагрузки: (

Так что у меня может быть многодокументы одновременно в памяти веб-приложения, что приводит к нехватке памяти.

Вопрос заключается в следующем: когда пользователь нажимает на загрузку веб-страницы, я начинаю писать на выходном потоке ... но пользователь получает всплывающее окно с"сохранить" или "отменить". Что происходит с документом, пока он не нажмет "сохранить"? Что если он нажмет "отмена"?

Поток вывода блокируется при записи, пока пользователь не нажмет кнопку "Сохранить"...

1 Ответ

1 голос
/ 28 июля 2011

Нет, выходной поток не заблокирован, он буферизируется и отправляется клиенту, когда ваш контейнер сервлетов считает, что пришло подходящее время (или когда вы принудительно отправляете вызов flush ()).

В зависимости от вашей серверной инфраструктуры (если у вас есть обратный прокси-сервер перед вашим веб-сервером), ваш запрос может быть неудачным или нет, но обычно вам не нужно об этом заботиться.

А что касается проблемы с памятью, вам, вероятно, следует позвонить в Интернет и либо написать напрямую, когда вы читаете из него, в поток вывода запроса, либо вы должны записать это в файл, а затем записать этот файл кусками в ответ, чтобы избежать использования слишком много памяти и сбой сервера из-за ошибок нехватки памяти.

...