WebSphere регистрирует предупреждающее сообщение «SRTServletRes W WARNING: Cannot set header. Ответ уже принят» для одного запроса JSP. Мне нужны заголовки ответа позже в моем коде. Я провел некоторое исследование и понял, что Servlet пытается отправить больше данных в выходной поток, но поток уже зафиксирован. Я не понял, почему это происходит только с этим конкретным JSP, поскольку этот код сервлета отлично работает для других JSP. Эта страница не перенаправляется, и я получаю ответ без заголовков ответов.
Невозможно установить заголовок в JSP. Ответ уже зафиксирован
Ответы (1)
Когда ответ зафиксирован, это означает, что по крайней мере заголовки уже отправлены на сторону клиента. Вы не можете устанавливать/изменять заголовки, когда ответ уже зафиксирован, потому что уже слишком поздно.
Ответ будет зафиксирован всякий раз, когда выполняется одно или несколько из следующих условий:
HttpServletResponse#sendRedirect()
был вызван.- Более 2 КБ уже было записано в вывод ответа либо сервлетом, либо JSP.
- Было записано более 0 КБ, но менее 2 КБ, и
flush()
было вызвано в потоке вывода ответа либо сервлетом, либо JSP.
Ограничение буфера в 2 КБ настраивается в конфигурации сервера приложений.
Вам нужно изменить логику кода, чтобы она устанавливала только заголовки до фиксации ответа. Вам не следует никогда устанавливать/изменять заголовки ответа с помощью скриптлетов внутри/наполовину JSP. Вы должны сделать это только в Filter
перед продолжением цепочки или в контроллере страницы Servlet
перед отправкой запроса. Также позаботьтесь о том, чтобы ни один из них не был вызван включаемым файлом JSP.