Tomcat не показывает сообщение об ошибке, когда sendError используется из сервлета - PullRequest
7 голосов
/ 18 ноября 2011

Хорошо, поэтому у меня довольно простое веб-приложение, использующее сервлет, и в некоторых случаях я отправляю сообщение об ошибке клиенту, например:

response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Did not specify parameter xyz");

В целом это работает нормально, но Tomcat (6.0.33 и Java1.6.0_26-b03) не показывает указанное сообщение об ошибке сверху.

Если я запускаю приложение в другом контейнере, например на стеклянной рыбе, отображается данное сообщение.

Итак, пример вывода....

Tomcat:
400 - Bad Request

Glassfish:
400 - Did not specify parameter xyz

Можно ли настроить tomcat на такое же поведение?

Ответы [ 3 ]

9 голосов
/ 18 ноября 2011

Хорошо, после еще нескольких копаний я нашел решение здесь: Как правильно отправить HTTP-сообщение клиенту

Вам необходимо установить:

org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER = true

в /conf/catalina.properties

Это заставляет tomcat отправлять сообщение об ошибке, которое вы установили в заголовках, «правильно»:)

0 голосов
/ 13 мая 2017

Tomcat больше не поддерживает свойство USE_CUSTOM_STATUS_MSG_IN_HEADER.

Журнал изменений от версии 8.5.0 :

RFC 7230 утверждает, что клиенты должны игнорировать фразы-причины в HTTP / 1.1. ответные сообщения. Поскольку фраза причины не является обязательной, Tomcat нет дольше отправляет. В результате системное свойство org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER больше не используется и был удален. (Markt)

0 голосов
/ 18 ноября 2011

возможно, вы захотите создать пользовательскую страницу ошибки, например 400.jsp, и поместить ее в web.xml как

<error-page>
   <error-code>400</error-code>
.. . path to the page (sorry I don't remember the exact syntax)
</error-page>

На этой странице ошибки вы можете получить это сообщение и показать егопользователь.Преимущества пользовательских страниц ошибок в том, что вы можете применять свои собственные стили CSS, разметку для вашего сайта и т. Д.

UPD: , если вам не нравятся пользовательские страницы с ошибками: мы использовалиэтот код в RESTful API для отправки ответа пользователю с ошибкой и сообщением

return javax.ws.rs.core.Response.status(Status.BAD_REQUEST).entity("My message here).build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...