Вот как это работает. Контейнер не будет вызывать сервлет, пока весь запрос не будет получен от клиента. Выполнение этого каким-либо другим способом повлечет за собой любое количество непредвиденных последствий. Для начала вам нужно будет установить проверки завершения вручную во всех ваших сервлетах, которые просто добавят ненужный код котельной пластины.
Если вы хотите иметь возможность реагировать на HTTP-запросы с момента их получения, вам придется написать собственную программу для сокетов, связывать и прослушивать порт и обрабатывать ввод самостоятельно.
Вывод - это другое дело. Выходной поток буферизирует весь вывод сервлета, но вы можете в любой момент вызвать flushBuffer () на ServletResponse, чтобы заставить его отправлять весь текущий буферизованный контент. Предупреждение об этом, хотя, как только вы начнете отправлять данные клиенту, ответ считается «подтвержденным». Это из-за протокола HTTP, который требует, чтобы определенные части информации приходили в определенном порядке. Заголовки, например, должны отправляться первыми, это означает, что после того, как вы «зафиксировали» ответ, серверное приложение больше не сможет добавить заголовки и файлы cookie. Контейнер всегда будет вызывать flushBuffer () (или flush () для ServletOutputStream) после того, как сервлет завершит выполнение.