web-dev-qa-db-fra.com

Comment spécifier la page d'erreur par défaut dans web.xml?

J'utilise l'élément <error-page> dans web.xml pour spécifier la page d'erreur conviviale lorsque l'utilisateur rencontre une certaine erreur, telle qu'une erreur avec le code 404:

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

Cependant, je souhaite que si l'utilisateur ne rencontre aucun code d'erreur spécifié dans <error-page>, il devrait voir une page d'erreur par défaut. Comment puis-je faire cela en utilisant l'élément dans le web.xml?

130
ipkiss

Sur Servlet 3.0 ou plus récent, vous pouvez simplement spécifier

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

Mais comme vous êtes toujours sur Servlet 2.5, il n'y a pas d'autre moyen que de spécifier chaque erreur HTTP commune individuellement. Vous devez déterminer les erreurs HTTP que l'utilisateur final pourrait éventuellement rencontrer. Sur une application Web barebones avec, par exemple, l'utilisation de l'authentification HTTP, une liste de répertoires désactivée, l'utilisation de servlets personnalisés et du code pouvant éventuellement générer des exceptions non gérées ou ne disposant pas de toutes les méthodes, vous souhaitez le définir pour les erreurs HTTP 401 , 403, 500 et 503 respectivement.

<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>

Cela devrait couvrir les plus communs.

230
BalusC

Vous pouvez aussi faire quelque chose comme ça:

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

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

Pour le code d'erreur 403, il renverra la page 403.html, et pour tout autre code d'erreur, il renverra la page error.html.

21
Guy

Vous pouvez également spécifier <error-page> pour les exceptions en utilisant <exception-type>, par exemple ci-dessous:

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

Ou mappez un code d'erreur en utilisant <error-code>:

<error-page>
    <error-code>404</error-code>
    <location>/errorpages/404error.html</location>
</error-page>
7
Aniket Sahrawat