Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Обработка неперхваченных исключений под Tomcat


Автор: Maksym 7.1.2006, 19:57
В системе возможны необработанные исключения, которые вываливаются на уровень Tomcat и видны пользователю в окне браузера.
Хочется, чтобы любая непредвиденная ситуация заставляла Tomcat показать специальную страницу проекта с извинениями, предложением связаться с администрацией и т.п.
Как это сделать? smile
В web.xml проекта есть Pages > Error Pages , но добавление туда страниц ничего не дало
Код

<error-page>
<exception-type>
Exception
</exception-type>
<location>
/error.jsp
</location>
</error-page>

все равно исключение видно, на страницу error.jsp система не посылает... smile
Есть еще праметр код ошибки.. может в нем дело..?

Большое спасибо.

Автор: batigoal 7.1.2006, 20:38
По-моему, у самой страницы еще есть директивы, связанные с обработкой ошибок на ней. В частности, если не ошибаюсь, у error.jsp должен быть прописан атрибут error-page=true или что-то подобное. Во-вторых, возможно, страницу ошибок надо указать непосредственно на каждой странице, но это навряд ли.

Автор: Stampede 7.1.2006, 22:26
Цитата(Maksym @ 7.1.2006, 19:57 Найти цитируемый пост)

все равно исключение видно, на страницу error.jsp система не посылает...


В принципе должно все работать, поэтому:

- попробуй указать полное имя класса: java.lang.Exception;

- убедись, что файл error.jsp лежит в корне (на одном уровне с WEB-INF);

- проверь, нет ли в ней ошибок времени выполнения, то есть вызывается ли страница при обращении напрямую по yourdomain.com/error.jsp;

- если с предыдущими тестами все в порядке, убедись, что элемент <error-page> расположен в нужном месте файла web.xml. Порядок элементов задается DTD файлом и выглядит вот так:

Цитата
<!ELEMENT web-app (icon?, display-name?, description?, distributable?,
context-param*, filter*, filter-mapping*, listener*, servlet*,
servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?,
error-page*, taglib*, resource-env-ref*, resource-ref*, security-constraint*,
login-config?, security-role*, env-entry*, ejb-ref*,  ejb-local-ref*)>


- если совсем ничего не выходит, попробуй смапить по коду ошибки (HTTP status code), для начала создай записи для кодов 404 и 500.

Надеюсь, что-нибудь из перечисленного должно сработать smile

Автор: batigoal 7.1.2006, 22:58
Цитата(Stampede @ 7.1.2006, 23:26 Найти цитируемый пост)

- если совсем ничего не выходит, попробуй смапить по коду ошибки (HTTP status code), для начала создай записи для кодов 404 и 500.


Томкат это поддерживает? Я думал, это только средствами веб-сервера можно сделать (апачевскими, например).

Автор: onsh76 9.1.2006, 08:54
Цитата(Lamer George @ 7.1.2006, 22:58)
Цитата(Stampede @  7.1.2006,  23:26 Найти цитируемый пост)

- если совсем ничего не выходит, попробуй смапить по коду ошибки (HTTP status code), для начала создай записи для кодов 404 и 500.


Томкат это поддерживает? Я думал, это только средствами веб-сервера можно сделать (апачевскими, например).

Поддерживает, вот фрагмент из web.xml file:
Код

<error-page>
    <error-code>404</error-code>
    <location>/jsp/error/errorMessage404.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/jsp/error/errorMessage500.jsp</location>
  </error-page>


У меня вопрос к коллегам. А секьюрно ли показывать содержимое errorStack в errorJsp, как предлагается вот http://weblogs.java.net/blog/crazybob/archive/2004/02/exception_handl.html?
Может лучше логировать ошибку и показывать юзеру содержимое generic error page?
Кто как делает?


Автор: batigoal 9.1.2006, 11:20
У нас обычно выдается короткое сообщение, если ошибку можно идентифицировать (например, ошибка подключения к БД). Если нет - то generic error. Но стек мы не показываем никогда. Зачем его видеть юзеру, который не понимает ничего в программировании? Только пугать зазря.

Автор: Stampede 9.1.2006, 11:24
Цитата(onsh76 @ 9.1.2006, 08:54 Найти цитируемый пост)
А секьюрно ли показывать содержимое errorStack в errorJsp, как предлагается вот здесь?


Кончно, несекьюрно. Но чувак ведь и не говорит, что ошибку нужно показывать всем подряд:

Цитата
Beautify our error page's design a bit, add some logic to show the stack trace to QA users but hide it from customers, and we're ready to go to production!


Так что все нормально. Единственное замечание по этому поводу: я предпочитаю в случае ошибки делать редирект на статическую страницу, и вот из каких соображений. Если при обработке error.jsp в свою очередь возникнет ошибка, то юзер увидит дефолтную страницу ошибки - со всеми адресами и явками, а это уж совсем ни к чему. Так что я все-таки за статику.

Автор: Maksym 10.1.2006, 18:46
Stampede
Спасибо за подробный ответ. smile
Задание полного имени исключения с пакетами ничего не дала.
Указание кода ошибки 500 - отлично работает, причем независимо от того где лежит файл обработки в корне или в любом другом месте проекта, все корректно находится и запускается.
В текущей ситуации этого вполне достатчно smile
С обработкой конкретных исключений буду разбираться пока не получается, но это не критично...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)