150 votes

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

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

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

Cependant, je veux que si l'utilisateur ne répond pas à un code d'erreur spécifié dans la section <error-page> il ou elle devrait voir une page d'erreur par défaut. Comment puis-je faire cela en utilisant l'élément dans la section web.xml ?

2 votes

Quel conteneur de servlet utilisez-vous/ciblez-vous et quelle version de servlet utilisez-vous ? web.xml déclaré ? Il existe un moyen simple depuis Servlet 3.0.

0 votes

J'utilise Tomcat 6 et Servlet 2.5.

253voto

BalusC Points 498232

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 quelles erreurs HTTP l'utilisateur final pourrait rencontrer. Dans le cas d'une application Web de base avec, par exemple, l'utilisation de l'authentification HTTP, une liste de répertoires désactivée, l'utilisation de servlets personnalisés et d'un code qui peut éventuellement lancer des exceptions non gérées ou dont toutes les méthodes ne sont pas implémentées, il est préférable de définir 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 courantes.

0 votes

Peut-on spécifier une page d'erreur générale et ensuite remplacer certains codes d'erreur avec l'option <error-code> tag ?

6 votes

@Tomas : Les gars de Tomcat ont eu le même problème que vous. Ceci n'est nulle part mentionné littéralement dans la spécification, seule la figure 14-10 dans la spécification et les web.xml Le fichier XSD prouve que <error-code> y <exception-type> est devenu facultatif au lieu d'être obligatoire. Voir numéro 52135 .

0 votes

java.sun.com/xml/ns/javaee/web-app_2_5.xsd ne spécifie pas d'enfant <description> pour l'élément <error-page>, donc coller le code ci-dessus tel quel dans un web.xml de Servlet 2.5 provoquera des erreurs de validation XSD. Si je les commente, cependant, cela fonctionne bien, merci !

26voto

Guy Points 622

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.

11voto

Aniket Sahrawat Points 5910

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

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

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X