Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Почему response в jsp бывает commited?


Автор: marlborist 23.10.2007, 12:05
У меня такая проблема:
Я пытаюсь сделать response.sendRedirect(url);
Но возникает ошибка: IllegalStateException.
Затем я выяснил что IllegalStateException возникает из - за того что response уже commited.
Затем я выяснил что response уже commited потому что в jsp где я вызываю iresponse.sendRedirect(url) есть include jsp файлы.
Подскажите пожалуйсто как сделать так чтобы response  небыл сommited или как в таком случае сделать redirect. 

Автор: mbasil 23.10.2007, 14:11
Если есть возможность, сделайте Redirect до включения другой страницы
(на самом деле это ведь, обычно делается в самом начале).

include можно сделать  двумя способами

1.  <%@ include file=”...” %>
2.  <jsp:include page=”...” />

Попробуйте заменить способ включения страницы. 
И еще, посмотрите исходный код, который сгенерировал контейнер  

Автор: ekr 23.10.2007, 15:27
Response становится commited, когда сбрасывается (flush) буфер ответа, т.е. первые строчки уже полетели клиенту.
После этого послать ему redirect-овый http-ответ уже нельзя.

Мораль: надо или менять логику (делать редирект по условию, проверку этого условия в начале) или поиграться с буфером (никакого фрейдизма ;-). Отлючить autoflush буфера и сбрасывать его вручную или сделать побольше размер буфера. Но это все полумеры - надо менять логику.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)