Я использую SimpleMappingExceptionResolver, который отправляет все исключения в представление, где он красиво отображается. Это работает, за исключением одного случая:
Если пользователь запрашивает страницу, а затем отправляет и "Отменяет" (я точно не знаю, как это работает, но я заметил, что если я нажимаю кнопку отправки формы сообщения HTTP очень быстро, и часто Firefox 7 как-то уведомляет сервер, он больше не интересуется результатом.) Затем Tomcat 6 поднимает ClientAbortException
, когда пытается сделать страницу, или напишите ответ http в любом виде.
Теперь начинается проблема: SimpleMappingExceptionResolver
"ловит" исключение и пытается отобразить его на странице html. Затем это вызывает в уже закрытом исключении Stream, который загрязняет файл журнала. (java.lang.IllegalStateException: getOutputStream() has already been called for this response
)
То, что я сделал, это зарегистрировать пустую страницу jsp для "ClientAbortException". Но я чувствую, что это хак. С другой стороны, я полагаю, что это не проблема без компромиссов, потому что я ожидаю этого почти в каждом приложении spring, которое отображает все исключения. Так кто-нибудь имеет опыт работы с этой проблемой или имеет представление о не столь хакерском решении?
<bean
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"
p:defaultErrorView="uncaughtException">
<property name="exceptionMappings">
<props>
<prop key=".MissingServletRequestParameterException">
resourceNotFound
</prop>
<prop key=".ClientAbortException">nothing</prop>
</props>
</property>
</bean>