English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
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.
Numero | Proprietà & Descrizione |
---|---|
1 | javax.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. |
2 | javax.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. |
3 | javax.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. |
4 | javax.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. |
5 | javax.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. |
6 | javax.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. |
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