Хотя это старая тема, которую ткнуло сообщество , я выложу свои мысли:
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)
at StartIntro.doPost(StartIntro.java:103)
Это может произойти, если что-то в StartIntro#doPost()
уже передало ответ. Ответ фиксируется, когда выполняется одно из следующих случаев:
- Ранее был установлен заголовок ответа.
- A
forward()
или include()
был вызван для того же ответа ранее.
- В ответ записано более 2 КБ данных.
- Написано меньше 2 КБ, и вызывается
flush()
.
Я бы дважды проверил, что делает StartIntro#doPost()
. Упомянутые 2 КБ зависят от сервера приложений, хотя в случае Tomcat его можно настроить в качестве размера буфера HTTP-соединителя.
Я бы добавил, что распространенная ошибка среди начинающих заключается в том, что они думают, что вызов forward()
или sendRedirect()
магическим образом завершится и "выпрыгнет" из блока метода, тем самым игнорируя остаток кода. Например:
protected void doPost() {
if (someCondition) {
forward();
}
redirect(); // This is STILL invoked when someCondition is true!
}
Таким образом, на самом деле это не так. Чтобы это исправить, вам нужно добавить оператор return;
в конец блока if
или ввести блок else
для вызова redirect()
.
Надеюсь, что эта информация поможет выявить основную причину.