English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
herramientas en línea-Cuando un Servlet lanza una excepción, el contenedor web utiliza exception elemento type web.xml
Debe usar web.xml para buscar la configuración que coincide con el tipo de excepción lanzada. error-página elemento para especificar el acceso a una página específicaExcepción o HTTP código de estado realizar la llamada de Servlet correspondiente.
Supongamos que hay una ErrorHandler El Servlet se llama en cualquier excepción o error definido. A continuación se muestra lo que se crea en web.xml.
<!-- definición de servlet --> <servlet> <servlet-nombre>ErrorHandler</servlet-nombre> <servlet-class>ErrorHandler</servlet-clase> </servlet> <!-- mapeo de servlet --> <servlet-mapeo> <servlet-nombre>ErrorHandler</servlet-nombre> <url-patrón>/ErrorHandler</url-patrón> </servlet-mapeo> <!-- error-página de error relacionada con el código --> <error-page> <error-código>404</error-código> <ubicación>/ErrorHandler</ubicación> </error-page> <error-page> <error-código>403</error-código> <ubicación>/ErrorHandler</ubicación> </error-page> <!-- excepción-página de error relacionada con el tipo --> <error-page> <excepción-type> javax.servlet.ServletException </excepción-tipo > <ubicación>/ErrorHandler</ubicación> </error-page> <error-page> <excepción-type>java.io.IOException</excepción-tipo > <ubicación>/ErrorHandler</ubicación> </error-page>
si desea definir un programa de manejo de errores común para todas las excepciones, debe definir el siguiente error-página, en lugar de definir un error único para cada excepción-elemento de página:
<error-page> <excepción-tipo>java.lang.Throwable</excepción-tipo > <ubicación>/ErrorHandler</ubicación> </error-page>
A continuación se presentan los puntos que deben tenerse en cuenta sobre el manejo de excepciones en web.xml mencionado anteriormente:
Servlet ErrorHandler se define de la misma manera que otros Servlet y se configura en web.xml.
si hay un código de estado de error, sin importar 404(No encontrado)o 403(Prohibido),se llamará al Servlet ErrorHandler.
Si la aplicación web arroja ServletException o IOExceptionentonces el contenedor web llamará al Servlet ErrorHandler.
Puede definir diferentes programas de manejo de errores para manejar diferentes tipos de errores o excepciones. El ejemplo proporcionado es muy genérico, esperamos que pueda comprender los conceptos básicos a través del ejemplo.
A continuación se muestra la lista de atributos de solicitud que pueden ser accedidos por el Servlet de manejo de errores para analizar los errores/La naturaleza de la excepción.
Número de serie | Atributo & Descripción |
---|---|
1 | javax.servlet.error.status_code Esta propiedad proporciona el código de estado, el código de estado puede ser almacenado y analizado después de almacenarse como tipo de datos java.lang.Integer. |
2 | javax.servlet.error.exception_type Esta propiedad proporciona información sobre el tipo de excepción, el tipo de excepción puede ser almacenado y analizado después de almacenarse como tipo de datos java.lang.Class. |
3 | javax.servlet.error.message Esta propiedad proporciona información específica del mensaje de error, la información puede ser almacenada y analizarse después de almacenarse como tipo de datos java.lang.String. |
4 | javax.servlet.error.request_uri Esta propiedad proporciona información sobre la llamada del URL al Servlet, la información puede ser almacenada y analizarse después de almacenarse como tipo de datos java.lang.String. |
5 | javax.servlet.error.exception Esta propiedad proporciona la información de la excepción generada, la información puede ser almacenada y analizarse después de almacenarse como tipo de datos java.lang.Throwable. |
6 | javax.servlet.error.servlet_name 该属性给出 Servlet 的名称,名称可被存储,并在存储为 java.lang.String 数据类型后可被分析。 |
以下是 Servlet 示例,将应对任何您所定义的错误或异常发生时的错误处理程序。
本示例让您对 Servlet 中的异常处理有基本的了解,您可以使用相同的概念编写更复杂的异常处理应用程序:
//导入必需的 java 库 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; //扩展 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 título = "Base Tutorial Site Error/Información de excepción String tipoDoc = "<!DOCTYPE html>\n"; out.println(tipoDoc) + "<html>\n" + "<head><title>" + título + "</título></cabecera>\n" + "<body bgcolor=\"#f0f0f0\">\n"); out.println("<h1>Ejemplo de información de excepción en el sitio web de base de tutoriales</h1> if (throwable == null && codigoEstado == null) { out.println("<h2>Información de error perdida</h2> out.println("Por favor, regrese <a href=\ + response.encodeURL("http://localhost:8080/) + "\">Página principal</a>."); } out.println("Código de error: ", + codigoEstado); } out.println("<h2>Información de error</h2> out.println("Nombre de Servlet: ", + servletName + "</br></br>"); out.println("Tipo de excepción: ", + throwable.getClass().getName() + "</br></br>"); out.println("URI de solicitud: ", + requestUri + "<br><br>"); out.println("Mensaje de excepción: ", + throwable.getMessage(())); } out.println("</cuerpo>"); out.println("</html>"); } // método para manejar solicitudes del método POST public void doPost(HttpServletRequest request, HttpServletResponse response) lanza ServletException, IOException { doGet(request, response); } }
compilar de manera habitual ErrorHandler.javacoloque sus archivos de clase en <Tomcat-instalación-directorio>/webapps/ROOT/WEB-INF/en la carpeta .
Añadamos la siguiente configuración en el archivo web.xml para manejar las excepciones:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-nombre>ErrorHandler</servlet-nombre> <servlet-clase>com.w3codebox.test.ErrorHandler</servlet-clase> </servlet> <!-- mapeos servlet --> <servlet-mapeo> <servlet-nombre>ErrorHandler</servlet-nombre> <url-patrón>/TomcatTest/ErrorHandler</url-patrón> </servlet-mapeo> <error-page> <error-código>404</error-código> <ubicación>/TomcatTest/ErrorHandler</ubicación> </error-page> <error-page> <excepción-tipo>java.lang.Throwable</excepción-tipo > <ubicación>/ErrorHandler</ubicación> </error-page> </web-app>
Ahora, intenta usar un Servlet que genere una excepción o ingrese una URL incorrecta, lo que desencadenará la llamada del contenedor web ErrorHandler Servlet y muestra el mensaje adecuado. Por ejemplo, si ingresa una URL incorrecta (como: http://localhost:8080/TomcatTest/Si la página no se conoce (UnKonwPage),se mostrará el siguiente resultado:
Código de error:404