Servlet – Depuración

Uno de los componentes más difíciles de construir servlets es probar y depurar. Debido a que los servlets incluyen mucha interacción cliente/servidor, son propensos a errores, aunque son difíciles de encontrar. Debido a que los servlets operan dentro de un servidor web altamente multiproceso y típicamente complicado, no funcionan bien con los depuradores comunes, puede ser difícil rastrear el motivo de las fallas no obvias.

También puede utilizar la pantalla interactiva de su servidor para depurar un servlet siguiendo estos pasos:

  1. Para construir su servlet, use el comando javac -g en el intérprete de Qshell.
  2. Coloque el código fuente (archivo .java) y el código compilado (archivo .class) en un directorio classpath.
  3. Inicie el servidor.
  4. En el trabajo donde se ejecuta el servlet, ejecute el comando Iniciar trabajo de servicio (STRSRVJOB).
  5. STRDBG CLASS(myServlet), donde myServlet es el nombre de su servlet. Es necesario mostrar la fuente.
  6. Presione F12 para establecer un punto de interrupción en el servlet.
  7. Para actualizar las modificaciones, haga clic en el botón Actualizar en el navegador web si la recarga automática de clases está habilitada, que es la configuración predeterminada. El estado de su aplicación no se pierde.
  8. Pierdes el estado del programa si la recarga automática de clases no está habilitada. Reinicie el servidor para aplicar las modificaciones.

Algunos consejos y sugerencias que pueden ayudarlo en su depuración:

  1. Usando System.out.println()
  2. El registro de mensajes
  3. Uso del depurador JDB
  4. Usar comentarios
  5. Encabezados de cliente y servidor

Usando el comando System.out.println() 

System.out.println() es un marcador que se utiliza para ver si se ha ejecutado una determinada pieza de código. El valor de la variable también se puede imprimir. Es más:\

Debido a que los objetos del sistema son parte de los objetos centrales de Java, se pueden usar en todas partes sin necesidad de instalar clases adicionales. Servlets, JSP, RMI, EJB, Common Beans and Classes y aplicaciones independientes son ejemplos de esto.

Escriba en el sistema con varias pausas en el punto de interrupción. No interfiere con el flujo habitual de ejecución de la aplicación, lo que significa que el tiempo es crítico cuando es muy beneficioso.

Sintaxis: Para usar el comando System.out.println() 

System.out.println("Debugging message");

Todos los mensajes creados por la sintaxis anterior se registrarán en el archivo de registro del servidor web.

registro de mensajes

Use el mecanismo de registro adecuado para capturar todos los mensajes de depuración, advertencia y error, lo cual es una gran idea; Se sugiere log4J para capturar todos los mensajes. La función de registro() en la API de Servlet también proporciona una manera fácil de generar:

Ejemplo:

Java

// Java Program to Illustrate log4J for Capturing
// All Messages Logs
 
// Importing required classes
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Class
// Extending HttpServlet class
public class GFG extends HttpServlet {
 
    // Method 1
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, java.io.IOException
    {
 
        String par = request.getParameter("par1");
 
        // Calling the two ServletContext.log methods
        ServletContext context = getServletContext();
        if (par == null || par.equals(""))
 
            // log version with Throwable parameter
            context.log("No message received:",
                        new IllegalStateException(
                            "Missing parameter"));
        else
            context.log("Here is the visitor's message: "
                        + par);
 
        response.setContentType("text/html");
        java.io.PrintWriter out = response.getWriter();
 
        // Title to be displayed
        String title = "Geeksforgeeks Context Log program ";
 
        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"
            + "<h1 align = \"center\">" + title + "</h1>\n"
            + "<h2 align = \"center\">Messages sent successfully </h2>\n"
            + "</body></html>");
    }
}

Archivo: web.xml

XML

<web-app>
 <servlet>
  <servlet-name>GFG</servlet-name>
  <servlet-class>GFG</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>GFG</servlet-name>
  <url-pattern>/GFG</url-pattern>
 </servlet-mapping>
 <welcome-file-list>
  <welcome-file>GFG.java</welcome-file>
 </welcome-file-list>
</web-app>

Salida: Ejecute el archivo GFG.java, obtendrá la siguiente salida:

Uso del depurador JDB

Para depurar Servlet, use el comando jdb de depuración de applet o aplicación .

Podemos usar sun.servlet.http.HttpServer para depurar un Servlet y luego ejecutarlo como HttpServer Servlet para responder a las requests HTTP en el lado del navegador. Este sencillo software de subprograma de depuración es similar. La aplicación real que se está depurando es sun.applet.AppletViewer al depurar un subprograma.

Los detalles sobre cómo depurar un subprograma suelen estar ocultos de forma predeterminada en la mayoría de los depuradores. De manera similar, al usar el depurador, debe realizar lo siguiente para el servlet:

  • Configure el classpath de su depurador para que se puedan encontrar sun.servlet.http.Http-Server y las clases asociadas.
  • Establezca la ruta de clases de su depurador para encontrar su servlet y las clases que lo acompañan, que normalmente se encuentran en la raíz/servlets del servidor y la raíz/clases del servidor en la raíz/servlets del servidor no deberían estar en su ruta de clases, ya que evita la recarga del servlet. Esta inclusión, por otro lado, es beneficiosa para la depuración. Permite que su depurador establezca puntos de interrupción en un servlet antes de que el cargador de servlet propietario de HttpServer lo cargue.

Comience a depurar sun.servlet.http.HttpServer después de haber especificado el classpath correcto. Puede usar un navegador web para realizar una solicitud al HttpServer para el servlet proporcionado (http://localhost:8080/servlet/ServletToDebug) después de establecer puntos de interrupción en el servlet que desea depurar. En sus puntos de interrupción, debe observar la detención de la ejecución.

Uso de comentarios

La depuración se verá favorecida por los comentarios en el código de diversas formas. Las notas se pueden utilizar en una variedad de formas para ayudar con el proceso de depuración.

Para eliminar temporalmente algún código Java, use comentarios de Java Servlet y comentarios de una sola línea (//…), comentarios de varias líneas (/ *… * /). Si el error desaparece, todo lo que tiene que hacer ahora es mirar el código comentado para averiguar qué está mal.

Encabezados de cliente y servidor

Cuando un servlet no funciona según lo previsto, a veces es útil examinar la solicitud y la respuesta HTTP sin procesar. Si sabe cómo funciona HTTP, puede leer la solicitud y la respuesta y averiguar exactamente qué sucede con los encabezados.

Nota: Recuerde ciertos puntos clave importantes para la depuración. Aquí hay una lista de algunos otros consejos de depuración de servlet:

  1. Tenga en cuenta que las clases/raíz del servidor no se recargan, aunque los servlets/raíz del servidor ciertamente lo hacen.
  2. Solicite que un navegador muestre el contenido sin procesar de la página que está viendo ahora. Esto puede ayudar en la detección de problemas de formato. En el menú Ver, generalmente es una opción.
  3. Al requerir una actualización completa del sitio web, puede asegurarse de que el navegador no almacene en caché los resultados de una solicitud anterior. Use Shift-Reload en Netscape Navigator y Shift-Refresh en Internet Explorer.
  4. Compruebe que la función init() de su servlet acepta un argumento ServletConfig e inmediatamente llama a super.init(config).

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 *