Servlet – Manejo de excepciones

Cuando un servlet lanza una excepción, el contenedor web busca una coincidencia con el tipo de excepción lanzada en configuraciones web.xml que emplean el elemento de tipo de excepción. Para definir la invocación de servlets en respuesta a errores particulares o códigos de estado HTTP, debe utilizar el elemento de página de error en web.xml.

El manejo de excepciones es el proceso de transformar los mensajes de error del sistema en mensajes de error fáciles de usar.

  1. Técnica de manejo de excepciones mediante programación: este método de gestión de excepciones en la programación Java mediante el uso de bloques try y catch se conoce como mecanismo de manejo de excepciones mediante programación.
  2. Un mecanismo para gestionar excepciones declarativas: la técnica de gestión de excepciones declarativas hace referencia al método de gestión de excepciones utilizando elementos XML en el archivo web.xml. Si ocurre un error en más de una aplicación de servlet, este método es útil.

 Puntos importantes

  • Si la aplicación web lanza una ServletException o una IOException, el contenedor web llama al servlet /ErrorHandler.
  • Se pueden definir diferentes controladores de errores para manejar diferentes tipos de errores o excepciones.
  • El servlet ErrorHandler se especifica en el archivo web.xml y se define de la misma forma que cualquier otro servlet.
  • Si se encuentra un error con el código de estado 404INot Found) o 403, se invoca el servlet ErrorHandler (Prohibido)

Atributos de solicitud: errores/excepción

Atributos

Descripción

código de estado  Devuelve un código de estado que puede guardarse y estudiarse después de guardarse en la variable java.lang.
tipo_de_excepcion Proporciona información sobre el tipo de excepción que se puede mantener y estudiar después de guardarse en el archivo java.lang. 
mensaje Proporciona información sobre el mensaje de error real que puede guardarse y estudiarse después de guardarse en el archivo java.lang
solicitud_uri Proporciona información sobre la URL utilizada para llamar al servlet y puede conservarse y estudiarse después de almacenarse en la variable java.lang. 
excepción Proporciona información sobre la excepción planteada, que puede conservarse e investigarse.
nombre_servlet Devuelve una lista de nombres de servlets que pueden guardarse y estudiarse después de guardarse en el archivo java.lang. El tipo de datos es una string.

Configuración de web.xml

Las páginas de error relacionadas con el código de error se pueden configurar en el archivo web.xml.

Sintaxis:

< error - page >
< error - code > code < / error - code >
<location> / url < / location >
< / error - page >

Ejemplo:

< error - page >
< error - code > 404 < / error - code >
<location> / ErrorHandler < / location >
< / error - page >

Páginas de error relacionadas con el tipo de excepción

Sintaxis: 

< error - page >
< exception - type > exception type < / exception - type >
<location> / url < / location >
< / error - page >

Ejemplo:

< error - page >
< exception - type > javax.servlet.ServletException < / exception - type >
<location> / ErrorHandler < / location >
< / error - page >

Implementación:

Java

// Java Program to Illustrate ExceptionHandler
// Import required java libraries
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
  
// Extend HttpServlet class
public class ExceptionHandler extends HttpServlet {
  
    // Method
    // To handle GET method request
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
    {
  
        // Analyze the servlet exception
        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";
        }
  
        // Set response content type
        response.setContentType("text/html");
  
        PrintWriter out = response.getWriter();
        String title = "Error/Exception Information";
        String docType
            = "<!doctype html public \"-//w3c//dtd html 4.0 "
              + "transitional//en\">\n";
  
        out.println(docType + "<html>\n"
                    + "<head><title>" + title
                    + "</title></head>\n"
                    + "<body bgcolor = \"#f0f0f0\">\n");
  
        if (throwable == null && statusCode == null) {
            out.println(
                "<h1>Error information not found</h1>");
            out.println("Let's go back to <a href=\""
                        + response.encodeURL(
                            "http://localhost:8080/")
                        + "\">Home Page</a>.");
        }
        else if (statusCode != null) {
            out.println("The status code of an error is : "
                        + statusCode);
        }
        else {
            out.println("<h2>Error information</h2>");
            out.println("Servlet Name : " + servletName
                        + "</br></br>");
            out.println("Exception Type : "
                        + throwable.getClass().getName()
                        + "</br></br>");
            out.println("The request URI: " + requestUri
                        + "<br><br>");
            out.println("The exception message: "
                        + throwable.getMessage());
        }
        out.println("</body>");
        out.println("</html>");
    }
  
    // Method
    // To handle POST method request.
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)
        throws ServletException, IOException
    {
  
        doGet(request, response);
    }
}

Archivo: web.xml

XML

<web-app>
 <servlet>
  <servlet-name>ExceptionHandler</servlet-name>
  <servlet-class>ExceptionHandler</servlet-class>
 </servlet>
 <!-- servlet mappings -->
 <servlet-mapping>
  <servlet-name>ExceptionHandler</servlet-name>
  <url-pattern>/ExceptionHandler</url-pattern>
 </servlet-mapping>
 <error-page>
  <error-code>404</error-code>
  <location>/ExceptionHandler</location>
 </error-page>
 <error-page>
  <exception-type>java.lang.Throwable</exception-type>
  <location>/ExceptionHandler</location>
 </error-page>
</web-app>

Salida: Ejecute su código ExceptionHandler.java

Ahora intente ingresar algunas URL diferentes, el resultado esperado será el siguiente:

Publicación traducida automáticamente

Artículo escrito por sanketnagare y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *