Невозможно создать сеанс после подтверждения ответа
Сообщение об исключении довольно ясно. Есть средства незаконного государства. Вы не можете больше устанавливать / изменять заголовки ответа, когда ответ уже зафиксирован. Ответ фиксируется, когда заголовки уже отправлены на клиентскую сторону. Это точка нет возврата .
Ответ будет зафиксирован всякий раз, когда выходной поток был сброшен (в) напрямую. Это может произойти, когда вы записываете более 2 КБ в ответ (однако зависит от конфигурации сервера), или flush()
выполняете вручную, или выполняете вызов sendRedirect()
.
Всякий раз, когда необходимо создать сеанс, сервер должен установить cookie в заголовке ответа, чтобы он мог идентифицировать конкретного клиента и связать его с экземпляром HttpSession
в памяти сервера. Но это невозможно, если ответ уже зафиксирован, поэтому это исключение.
Обратно к основной причине этой проблемы:
Servlet.service () для исключения сервлета Captcha бросил
Это сервлет с servlet-name
из Captcha
, который вызвал эту проблему. Вам необходимо проверить / отладить всю цепочку запрос-ответ, чтобы увидеть, какие сервлеты / фильтры все вызываются и какие из них могли передать ответ до того, как сервлет Captcha
смог создать сеанс. Я не могу помочь вам в дальнейшем, поскольку эта информация отсутствует в вашей теме.
По крайней мере, в приведенном ниже примере кода я вижу, что вы излишне вызываете response.getWriter()
. Я не уверен, как выглядит код реального мира, может быть, вы удалили несколько строк, но есть вероятность, что вы действительно пишете в него, и это может быть основной причиной проблемы. Если вы напишите слишком много или сделаете флеш на нем, то восстановление будет зафиксировано. не пишите в ответ внутри сервлета, который должен быть контроллером. Там вы обычно используете JSP для. Или, если это для целей отладки, используйте стандартный вывод (System.out.println()
) или Logger .