Какой вред причиняет java.lang.IllegalStateException: ответ уже зафиксирован

Я постоянно получаю ошибку ниже в журналах консоли weblogic 10.3

java.lang.IllegalStateException: Response already committed
at weblogic.servlet.internal.ServletResponseImpl.objectIfCommitted(ServletResponseImpl.java:
1462)
at weblogic.servlet.internal.ServletResponseImpl.sendError(ServletResponseImpl.java:601)
at org.apache.struts.action.RequestProcessor.processMapping(RequestProcessor.java:658)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:193)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)

Усеченный. см. файл журнала для полной трассировки стека

Мне было интересно, какой вред причиняется этим, если его не исправить? Эта ошибка была в моем приложении до того, как я присоединился к команде. Достаточно ли она серьезна, чтобы квалифицироваться как «Требуется немедленное исправление»?


person Ravi Gupta    schedule 06.01.2010    source источник


Ответы (3)


Struts имеет открытый исходный код. Просто проверьте источник RequestProcessor до строки 658 (как указано в трассировке стека):

// No mapping can be found to process this request
String msg = getInternal().getMessage("processInvalid", path);
log.error(msg);
response.sendError(HttpServletResponse.SC_NOT_FOUND, msg);

Смотрите комментарий: No mapping can be found to process this request. Это основная причина проблемы. Но вызов sendError() для отображения сообщения об ошибке также не может быть выполнен, поскольку ответ уже зафиксирован. По-видимому, есть две причины сбоя: отсутствует сопоставление, и работа сопоставления Struts по умолчанию была принята программно неправильным образом.

person BalusC    schedule 06.01.2010
comment
(+1) просмотр исходного кода библиотек, на мой взгляд, лучший способ быстро отладить проблемы, зависящие от фреймворка. - person Bozho; 06.01.2010

Это означает, что приложение пыталось отправить HTTP-заголовок после отправки ответа. Какой вред это наносит, зависит от приложения.

В большинстве случаев браузер может допустить отсутствие HTTP-заголовка, но, например, если вы хотите указать специальный Content-Type, это может стать проблемой.

Тем не менее, я предлагаю вам найти основную причину проблемы, чтобы избежать каких-либо запутанных или «странных» результатов.

person Christian Seifert    schedule 06.01.2010

Это зависит от того, смысл ошибки в том, что вы написали в свой объект HttpResponse и начали отправлять ответ (путем вызова flush(), sendError() или sendRedirect()), поэтому потенциально любые дополнения к потоку ответа (или заголовки и т. д. ) или последующее действие (например, вы вызвали flush(), а теперь вы вызываете sendError()) запрошенное будет потеряно.

person Mike Tunnicliffe    schedule 06.01.2010
comment
Простите мою неопытность, но я не понимаю. В нашем приложении struts есть некоторый класс DispatchAction, в котором бизнес-логика выполняется путем вызова соответствующих BusinessDeleegators. Когда все в порядке, метод возвращается, вызывая findForward для экземпляра ActionMapping. Вы видите здесь проблему..? - person Ravi Gupta; 06.01.2010
comment
Нет, если ваша бизнес-логика не отправляет сообщения вашему объекту ответа. Я не слишком хорошо знаком со стойками, поэтому я не могу дать разумный ответ на этом уровне, все, что я могу сказать, это то, что по своему опыту работы с базовыми сервлетами я видел эту ошибку, фиксируя объект ответа более одного раза. Извините, я не могу больше помочь. - person Mike Tunnicliffe; 06.01.2010