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

Gestione delle eccezioni Servlet

Quando un Servlet lancia un'eccezione, il container web utilizza l'elemento exception-type per web.xml per cercare la configurazione che corrisponde al tipo di eccezione lanciata.

è necessario utilizzare error-page elemento per specificare la gestione degli errori per unaeccezione o HTTP codice di stato effettuare la chiamata Servlet corrispondente.

configurazione web.xml

Immaginiamo che ci sia una ErrorHandler Il Servlet viene chiamato in caso di qualsiasi eccezione o errore definito. Di seguito sono riportati gli elementi creati in web.xml.

<!-- definizione servlet -->
<servlet>
        <servlet-name>ErrorHandler</servlet-name>
        <servlet-class>ErrorHandler</servlet-class>
</servlet>
<!-- mappatura servlet -->
<servlet-mapping>
        <servlet-name>ErrorHandler</servlet-name>
        <url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>
<!-- error-code correlato alla pagina di errore -->
<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-type correlato alla pagina di errore -->
<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>

Se si desidera avere un gestore degli errori comune per tutte le eccezioni, è necessario definire il seguente error-page, piuttosto che definire un elemento error-page per ogni eccezione:

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

Ecco alcuni punti da notare sulla gestione degli errori in web.xml:

  • Il Servlet ErrorHandler è definito allo stesso modo degli altri Servlet e viene configurato in web.xml.

  • Se si verifica un codice di stato di errore, indipendentemente che sia 404 (Not Found Non trovato) o 403 (Forbidden vietato), verrà chiamato il Servlet ErrorHandler.

  • Se l'applicazione web lancia ServletException o}} IOExceptionAllora il container web chiamerà il Servlet ErrorHandler.

  • Potete definire diversi gestori degli errori per gestire diversi tipi di errori o eccezioni. L'esempio sopra è molto generico, speriamo che possiate comprendere i concetti di base attraverso l'esempio.

Proprietà della richiesta - Errori/ Eccezioni

Di seguito è elencata la lista delle proprietà della richiesta che possono essere accedute dal Servlet di gestione degli errori, utilizzate per analizzare la natura degli errori/eccezioni.

NumeroProprietà & Descrizione
1javax.servlet.error.status_code
Questa proprietà fornisce lo stato di codice, che può essere memorizzato e analizzato dopo essere stato memorizzato come tipo di dati java.lang.Integer.
2javax.servlet.error.exception_type
Questa proprietà fornisce informazioni sul tipo dell'eccezione, che può essere memorizzata e analizzata dopo essere stata memorizzata come tipo di dati java.lang.Class.
3javax.servlet.error.message
Questa proprietà fornisce informazioni dettagliate sul messaggio di errore, che può essere memorizzata e analizzata dopo essere stata memorizzata come tipo di dati java.lang.String.
4javax.servlet.error.request_uri
Questa proprietà fornisce informazioni sull'URL che chiama il Servlet, che può essere memorizzata e analizzata dopo essere stata memorizzata come tipo di dati java.lang.String.
5javax.servlet.error.exception
Questa proprietà fornisce le informazioni sul messaggio dell'eccezione, che può essere memorizzata e analizzata dopo essere stata memorizzata come tipo di dati java.lang.Throwable.
6javax.servlet.error.servlet_name
Questa proprietà fornisce il nome del Servlet, che può essere memorizzato e analizzato dopo essere stato memorizzato come tipo di dati java.lang.String.

Esempio di gestore degli errori Servlet

Di seguito è riportato un esempio di Servlet che gestisce gli errori o le eccezioni definiti da voi:

Questo esempio vi fornisce una comprensione di base del trattamento delle eccezioni nei Servlet, potete utilizzare i concetti simili per scrivere applicazioni di gestione delle eccezioni più complesse:

//importazione delle librerie java necessarie
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
//estensione della classe HttpServlet
public class ErrorHandler extends HttpServlet {}}
    // 处理 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";
        }
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");
    
        PrintWriter out = response.getWriter();
        String title = "基础教程网 Error/Exception 信息";
       
        String docType = "<!DOCTYPE html>\n";
        out.println(docType +
            "<html>\n" +
             "<head><title>" + title + "</title></head>\n" +
             "<body bgcolor=\"#f0f0f0\">\n"
           out.println("<h1>基础教程网异常信息示例演示</h1>");
           if (throwable == null && statusCode == null) {}}
              out.println("<h2>Informazioni di errore perse</h2>");
              out.println("Ritorna <a href=\ 
            response.encodeURL("http://localhost:8080/") + 
                "\">Pagina iniziale</a>.");
           } else if (statusCode != null) {
              out.println("Codice di errore: " + statusCode);
        } else {
               out.println("<h2>Informazioni di errore</h2>");
              out.println("Nome servlet: " + servletName + 
                              "</br></br>");
              out.println("Tipo di eccezione: " + 
                              throwable.getClass().getName() + 
                              "</br></br>");
              out.println("URI della richiesta: " + requestUri + 
                              "<br><br>");
              out.println("Informazioni di eccezione: " + 
                                  throwable.getMessage());
           }
           out.println("</body>");
           out.println("</html>");
    }
    // Gestisce le richieste POST
    public void doPost(HttpServletRequest request,
                      HttpServletResponse response)
       throws ServletException, IOException {
        doGet(request, response);
    }
}

Compilali come al solito ErrorHandler.javaMetti i tuoi file di classe nel <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes.

Aggiungiamo la seguente configurazione nel file web.xml per gestire le eccezioni:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
<servlet>
        <servlet-name>ErrorHandler</servlet-name>
        <servlet-class>com.w3codebox.test.ErrorHandler</servlet-class>
</servlet>
<!-- mappature servlet -->
<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>

Ora, prova a utilizzare un Servlet che genera un'eccezione o inserisci un URL errato, questo attiverà la chiamata del container Web ErrorHandler del Servlet e visualizza un messaggio appropriato. Ad esempio, se inserisci un URL errato (come: http://localhost:8080/TomcatTest/UnKonwPage), verrà visualizzato il seguente risultato:

Codice di errore: 404