English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Gestion des exceptions Servlet

Quand un Servlet lève une exception, le conteneur Web utilise exception-élément type web.xml recherchez la configuration correspondant au type d'exception lancée.

Vous devez utiliser error-page élément pour spécifier l'accès à une page spécifiqueException ou HTTP code d'état faire l'appel Servlet correspondant.

configuration web.xml

Supposons qu'il y ait ErrorHandler Le Servlet est appelé à chaque fois qu'une exception ou une erreur est définie. Voici les éléments créés dans web.xml.

<!-- définition servlet -->
<servlet>
        <servlet-name>ErrorHandler</servlet-name>
        <servlet-class>ErrorHandler</servlet-class>
</servlet>
<!-- mappage servlet -->
<servlet-mapping>
        <servlet-name>ErrorHandler</servlet-name>
        <url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>
<!-- error-page liée au code -->
<error-page>
    <error-code>404</error-code>
    <location>/ErrorHandler</location>
</error-page>
<error-page>
    <error-code>403</error-code>
    <location>/ErrorHandler</location>
</error-page>
<!-- exception-page liée au type -->
<error-page>
    <exception-type>
          javax.servlet.ServletException
    </exception-type >
    <location>/ErrorHandler</location>
</error-page>
<error-page>
    <exception-type>java.io.IOException</exception-type >
    <location>/ErrorHandler</location>
</error-page>

Si vous souhaitez définir un gestionnaire d'erreurs générique pour toutes les exceptions, vous devez définir le suivant-page, plutôt que de définir un error distinct pour chaque exception-Élément page :

<error-page>
    <exception-type>java.lang.Throwable</exception-type >
    <location>/ErrorHandler</location>
</error-page>

Voici les points à noter concernant la gestion des exceptions dans web.xml ci-dessus:

  • Servlet ErrorHandler est défini de la même manière que d'autres Servlets et configuré dans web.xml.

  • s'il y a un code d'état d'erreur, peu importe 404(Non trouvé)ou 403(Interdit),le Servlet ErrorHandler est appelé.

  • Si l'application Web lance ServletException ou IOExceptionalors le conteneur Web appelle le Servlet ErrorHandler.

  • Vous pouvez définir différents gestionnaires d'erreurs pour traiter différents types d'erreurs ou d'exceptions. L'exemple fourni est très générique, j'espère que vous pourrez comprendre les concepts de base à travers cet exemple.

Attributs de requête - Erreur/Exception

Voici la liste des attributs de requête accessibles par le Servlet de gestion des erreurs pour analyser les erreurs/La nature de l'exception.

NuméroPropriété & Description
1javax.servlet.error.status_code
Cette propriété fournit le code d'état, le code d'état peut être stocké et analysé après sa conversion en type de données java.lang.Integer.
2javax.servlet.error.exception_type
Cette propriété fournit des informations sur le type d'exception, le type d'exception peut être stocké et analysé après sa conversion en type de données java.lang.Class.
3javax.servlet.error.message
Cette propriété fournit des informations détaillées sur le message d'erreur, les informations peuvent être stockées et analysées après leur conversion en type de données java.lang.String.
4javax.servlet.error.request_uri
Cette propriété fournit des informations sur l'appel du Servlet via l'URL, les informations peuvent être stockées et analysées après leur conversion en type de données java.lang.String.
5javax.servlet.error.exception
Cette propriété fournit des informations sur l'exception générée, les informations peuvent être stockées et analysées après leur conversion en type de données java.lang.Throwable.
6javax.servlet.error.servlet_name
Cette propriété donne le nom du Servlet, le nom peut être stocké et analysé après avoir été stocké sous le type de données java.lang.String.

Exemple de gestionnaire d'erreurs Servlet

Voici un exemple de Servlet, qui contient le gestionnaire d'erreurs pour traiter toute erreur ou exception définie.

Ce exemple vous permet de comprendre de base la gestion des exceptions dans les Servlet, vous pouvez utiliser les mêmes concepts pour écrire des applications de gestion des exceptions plus complexes :

//Importer les bibliothèques java nécessaires
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
//Étendre la classe HttpServlet
public class ErrorHandler extends HttpServlet {
    // Méthode pour traiter les requêtes GET
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        Throwable throwable = (Throwable)
        request.getAttribute("javax.servlet.error.exception");
        Integer statusCode = (Integer)
        request.getAttribute("javax.servlet.error.status_code");
        String servletName = (String)
        request.getAttribute("javax.servlet.error.servlet_name");
        if (servletName == null){
            servletName = "Unknown";
        }
        String requestUri = (String)
        request.getAttribute("javax.servlet.error.request_uri");
        if (requestUri == null){
            requestUri = "Unknown";
        }
        // Définir le type de contenu de la réponse
        response.setContentType("text"/html;charset=UTF-8");
    
        PrintWriter out = response.getWriter();
        String title = "Base Tutorial Website Error/Exception information";
       
        String docType = "<!DOCTYPE html>\n";
        out.println(docType +
            "<html>\n" +
             "<head><title>" + title + "</title></head>\n" +
             "<body bgcolor=\"#f0f0f0\">\n");
           out.println("<h1>Exemple de message d'exception sur le site de tutoriels de base/h1>");
           if (throwable == null && statusCode == null){
              out.println("<h2>Information d'erreur manquante</h2>");
              out.println("Retournez à la page <a href=\"" + 
            response.encodeURL("http://localhost:8080/)") + 
                "\">Page d'accueil</a>.");
           }else if (statusCode != null) {
              out.println("Code d'erreur: " + statusCode);
        }else{
               out.println("<h2>Information d'erreur</h2>");
              out.println("Nom du Servlet: " + servletName + 
                              "</br></br>");
              out.println("Type d'exception: " + 
                              throwable.getClass( ).getName( ) + 
                              "</br></br>");
              out.println("URI de la requête: " + requestUri + 
                              "<br><br>");
              out.println("Message d'exception: " + 
                                  throwable.getMessage( ));
           }
           out.println("</body>");
           out.println("</html>");
    }
    // méthode pour traiter les requêtes de méthode POST
    public void doPost(HttpServletRequest request,
                      HttpServletResponse response)
       lève ServletException, IOException {
        doGet(request, response);
    }
}

compilez de la manière habituelle ErrorHandler.java,mettez vos fichiers de classes dans <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/dans.

Ajoutons la configuration suivante dans le fichier web.xml pour gérer les exceptions :

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
<servlet>
        <servlet-name>ErrorHandler</servlet-name>
        <servlet-class>com.w3codebox.test.ErrorHandler</servlet-class>
</servlet>
<!-- servlet mappings -->
<servlet-mapping>
        <servlet-name>ErrorHandler</servlet-name>
        <url-pattern>/TomcatTest/ErrorHandler</url-pattern>
</servlet-mapping>
<error-page>
    <error-code>404</error-code>
    <location>/TomcatTest/ErrorHandler</location>
</error-page>
<error-page>
    <exception-type>java.lang.Throwable</exception-type >
    <location>/ErrorHandler</location>
</error-page>
</web-app>

Maintenant, essayez d'utiliser un Servlet qui génère une exception, ou entrez une URL incorrecte, ce qui déclenchera l'appel du conteneur Web ErrorHandler Servlet, et affichera un message approprié. Par exemple, si vous entrez une URL incorrecte (comme : http://localhost:8080/TomcatTest/Si le page inconnue (UnKonwPage) est affichée, alors il affichera le résultat suivant :

Code d'erreur :404