Невозможно установить заголовок в JSP. Ответ уже зафиксирован

WebSphere регистрирует предупреждающее сообщение «SRTServletRes W WARNING: Cannot set header. Ответ уже принят» для одного запроса JSP. Мне нужны заголовки ответа позже в моем коде. Я провел некоторое исследование и понял, что Servlet пытается отправить больше данных в выходной поток, но поток уже зафиксирован. Я не понял, почему это происходит только с этим конкретным JSP, поскольку этот код сервлета отлично работает для других JSP. Эта страница не перенаправляется, и я получаю ответ без заголовков ответов.


person Susmitha Pandi    schedule 08.01.2010    source источник


Ответы (1)


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

Ответ будет зафиксирован всякий раз, когда выполняется одно или несколько из следующих условий:

  • HttpServletResponse#sendRedirect() был вызван.
  • Более 2 КБ уже было записано в вывод ответа либо сервлетом, либо JSP.
  • Было записано более 0 КБ, но менее 2 КБ, и flush() было вызвано в потоке вывода ответа либо сервлетом, либо JSP.

Ограничение буфера в 2 КБ настраивается в конфигурации сервера приложений.

Вам нужно изменить логику кода, чтобы она устанавливала только заголовки до фиксации ответа. Вам не следует никогда устанавливать/изменять заголовки ответа с помощью скриптлетов внутри/наполовину JSP. Вы должны сделать это только в Filter перед продолжением цепочки или в контроллере страницы Servlet перед отправкой запроса. Также позаботьтесь о том, чтобы ни один из них не был вызван включаемым файлом JSP.

person BalusC    schedule 08.01.2010