Як вказати сторінку помилки за замовчуванням у web.xml?


138

Я використовую <error-page>елемент в web.xml для визначення сторінки дружньої помилки, коли користувач стикається з певною помилкою, наприклад, помилкою з кодом 404:

<error-page>
        <error-code>404</error-code>
        <location>/Error404.html</location>
</error-page>

Однак я хочу, щоб якщо користувач не відповідав жодному коду помилки, вказаному в <error-page>, він повинен переглядати сторінку помилок за замовчуванням. Як я можу це зробити за допомогою елемента в web.xml ?


2
Який серверний контейнер ви використовуєте / націлюєте та якою версією сервлету web.xmlоголошено? З Servlet 3.0 існує лише простий спосіб.
BalusC

Я використовую Tomcat 6, servlet 2.5
ipkiss

Відповіді:


240

У сервлет 3.0 або новіших версіях ви можете просто вказати

<web-app ...>
    <error-page>
        <location>/general-error.html</location>
    </error-page>
</web-app>

Але оскільки ви все ще знаходитесь на сервлеті 2.5, немає іншого способу, ніж вказати кожну загальну помилку HTTP окремо. Вам потрібно зрозуміти, з якими помилками HTTP може виникнути кінцевий користувач. На веб-сайті без гофреанів, наприклад, з використанням HTTP-аутентифікації, з відключеним списком каталогів, використанням користувацьких сервлетів та коду, який, можливо, може видаляти необроблені винятки або не застосовувати всі методи, тоді ви хочете встановити його для помилок HTTP 401 , 403, 500 та 503 відповідно.

<error-page>
    <!-- Missing login -->
    <error-code>401</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Forbidden directory listing -->
    <error-code>403</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Missing resource -->
    <error-code>404</error-code>
    <location>/Error404.html</location>
</error-page>
<error-page>
    <!-- Uncaught exception -->
    <error-code>500</error-code>
    <location>/general-error.html</location>
</error-page>
<error-page>
    <!-- Unsupported servlet method -->
    <error-code>503</error-code>
    <location>/general-error.html</location>
</error-page>

Це має охоплювати найпоширеніші з них.


Чи можете ви вказати загальну сторінку помилок, а потім замінити певні коди помилок за допомогою <error-code>тегу?
Qix - МОНІКА ПОМИЛИ

6
@Tomas: У хлопців Tomcat була така ж проблема, як і у вас. Ця інформація ніде не згадується буквально, лише цифра 14-10 у специфікації та web.xmlXSD-файл доводить це <error-code>та <exception-type>стає необов’язковим замість необхідного. Див. Випуск 52135 .
BalusC

java.sun.com/xml/ns/javaee/web-app_2_5.xsd не вказує, що для елемента <error-page> немає <description>, тому вставлення вищевказаного коду як є у веб-сервер 2,5.xml призведе до XSD помилки перевірки. Якщо я коментую їх, то це працює чудово, дякую!
László van den Hoek

1
@BalusC: Де повинна розміщуватися сторінка general-error.html (згадана у вашій відповіді) всередині WEB-INF? У мене дивна проблема з сервлетом 2.5, в якій для HTTP Error 403 я створив визначення <error-page> і сторінка error403.jsp сидить всередині WEB-INF, і через це сторінка error403.jsp завантажується, коли є до ресурсів намагаються отримати доступ, але зображення та css в межах помилки403.jsp не завантажуються, тому сторінка виглядає неправильно.
Jayy

@Kaipa: Просто використовуйте відносні URL-адреси, а не веб-контенти щодо ресурсів CSS / JS / зображення. Дуже багато початківців помилково вважають, що ці ресурси вирішені на стороні сервера, але вони фактично вирішені на стороні клієнта. Дивіться також stackoverflow.com/questions/3655316 / ...
BalusC

23

Ви також можете зробити щось подібне:

<error-page>
    <error-code>403</error-code>
    <location>/403.html</location>
</error-page>

<error-page>
    <location>/error.html</location>
</error-page>

Для коду помилки 403 він поверне сторінку 403.html, а для будь-якого іншого коду помилки поверне сторінку error.html.


8

Ви також можете вказати <error-page>винятки, використовуючи <exception-type>, наприклад, нижче:

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/errorpages/exception.html</location>
</error-page>

Або зіставіть код помилки за допомогою <error-code>:

<error-page>
    <error-code>404</error-code>
    <location>/errorpages/404error.html</location>
</error-page>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.