Вопрос или проблема
Кто-нибудь может подсказать, как отключить вывод стека ошибок Tomcat6 в браузер?
Tomcat: 6.0.29
Я внес следующие изменения в /opt/apache-tomcat-6.0.29/conf/web.xml
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
Мне сказали, что это приведет к появлению белого экрана, если файл не существует, однако я получаю стек ошибок на экране.
Я думаю, что в верхней части ваших .jsp страниц также нужно добавить что-то вроде этого:
<%@ page errorPage="errorpage.jsp" %>
Не уверен, но возможно вам также нужно добавить элемент error-page в локальный файл web.xml вашего приложения.
Если вы поставите HTTP сервер перед Tomcat, вы сможете не только отображать страницу, если Tomcat не работает, но и переопределить страницы ошибок, которые генерирует Tomcat, а также по-прежнему видеть стек ошибок, обращаясь напрямую к Tomcat.
Например, если вы используете Apache HTTPD, вы можете использовать директиву ProxyErrorOverride
для отображения локальных HTML страниц вместо стека ошибок. Что-то вроде
# Не проксировать страницу ошибки 500 на Tomcat
ProxyPass /my500error.html !
# Проксировать все другие запросы на Tomcat, работающий с HTTP соединением на порту 8080
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
# Переопределить страницу ошибки 500 от Tomcat
ProxyErrorOverride on
ErrorDocument 500 /my500error.html
Cуществует множество вариантов этого с использованием AJP
вместо HTTP
и вашего выбранного HTTP сервера.
Ответ или решение
Как отключить вывод трассировки стека в Tomcat 6
Если вы желаете отключить отображение трассировки стека в браузере при возникновении ошибок в вашем приложении, вы можете выполнить несколько шагов. Эта проблема особенно актуальна для пользователей Tomcat 6.0.29, и ваши изменения в файле web.xml
– это хороший старт, но давайте разберем процесс более детально.
1. Настройка web.xml
Вы уже добавили секцию для обработки ошибок в файл /opt/apache-tomcat-6.0.29/conf/web.xml
:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
Эта конфигурация указывает Tomcat перенаправлять все исключения типа Throwable
на страницу error.jsp
. Убедитесь, что вы создали error.jsp
и он доступен по указанному пути. Если страница отсутствует, Tomcat может по умолчанию показывать трассировку стека.
2. Указание страницы ошибок в JSP
Вы упомянули, что необходимо добавить директиву вначале каждого JSP файла:
<%@ page errorPage="error.jsp" %>
Это установит указанную вами страницу обработки ошибок на уровне каждого JSP. Таким образом, если произойдет ошибка на этом конкретном JSP, будет отображена ваша страница error.jsp
, а не трассировка стека.
3. Локальный файл web.xml
Также возможно, что необходимо добавить элемент error-page
в локальный файл web.xml
вашего приложения (обычно он находится в WEB-INF/web.xml
вашего веб-приложения). Если вы хотите, чтобы эта конфигурация применялась только к конкретному веб-приложению, разместите аналогичные настройки в его локальном web.xml
:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
4. Использование HTTP-сервера перед Tomcat
Если вы используете HTTP-сервер, такой как Apache HTTPD, вы можете настроить его для обработки ошибок вместо Tomcat. В этом случае можно использовать директивы, такие как ProxyErrorOverride
и ErrorDocument
, чтобы указать альтернативные страницы ошибок. Пример настройки:
# Не проксировать страницу ошибки 500 в Tomcat
ProxyPass /my500error.html !
# Проксировать все остальные запросы на Tomcat
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
# Переопределение страницы ошибки 500 из Tomcat
ProxyErrorOverride on
ErrorDocument 500 /my500error.html
Таким образом, если Tomcat вернет ошибку 500, HTTP-сервер будет обслуживать my500error.html
, а не показывать трассировку стека.
Заключение
Следуя этим шагам, вы сможете настроить Tomcat на отключение вывода трассировок стека и наладить управление ошибками в вашем веб-приложении. Убедитесь, что все необходимые страницы обработки ошибок существуют и доступны. Кроме того, если вы работаете с локальным web.xml
или HTTP-сервером, чем более целенаправленно вы настроите конфигурации, тем лучше будет работать ваше приложение в продуктивной среде.
Если у вас возникнут дополнительные вопросы или сложности, не стесняйтесь задавать их.