JSP: depuración
En este capítulo, discutiremos la depuración de una JSP. Siempre es difícil probar / depurar un JSP y servlets. JSP y Servlets tienden a involucrar una gran cantidad de interacción cliente / servidor, lo que hace que los errores sean probables pero difíciles de reproducir.
Los siguientes son algunos consejos y sugerencias que pueden ayudarle en la depuración.
Usando System.out.println ()
System.out.println()es fácil de usar como marcador para probar si una determinada pieza de código se está ejecutando o no. También podemos imprimir valores de variables. Considere los siguientes puntos adicionales:
Dado que el objeto System es parte de los objetos principales de Java, se puede utilizar en cualquier lugar sin la necesidad de instalar clases adicionales. Esto incluyeServlets, JSP, RMI, EJB's, ordinary Beans y classesy standalone applications.
En comparación con detenerse en puntos de interrupción, escribir en System.out no interfiere mucho con el flujo de ejecución normal de la aplicación, lo que la hace muy valiosa cuando el iming es crucial.
A continuación se muestra la sintaxis a utilizar System.out.println() -
System.out.println("Debugging message");
El siguiente ejemplo muestra cómo usar System.out.print() -
<%@taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>System.out.println</title></head>
<body>
<c:forEach var = "counter" begin = "1" end = "10" step = "1" >
<c:out value = "${counter-5}"/></br>
<% System.out.println( "counter = " + pageContext.findAttribute("counter") ); %>
</c:forEach>
</body>
</html>
Acceda a la JSP anterior, el navegador mostrará el siguiente resultado:
-4
-3
-2
-1
0
1
2
3
4
5
Si está utilizando Tomcat, también encontrará estas líneas adjuntas al final de stdout.log en el directorio de registros.
counter = 1
counter = 2
counter = 3
counter = 4
counter = 5
counter = 6
counter = 7
counter = 8
counter = 9
counter = 10
De esta manera, puede traer variables y otra información al registro del sistema que se puede analizar para averiguar la causa raíz del problema o por varias otras razones.
Usando el JDB Logger
los J2SEEl marco de trabajo de registro está diseñado para proporcionar servicios de registro para cualquier clase que se ejecute en la JVM. Podemos hacer uso de este marco para registrar cualquier información.
Reescribamos el ejemplo anterior usando la API del registrador JDK -
<%@taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%@page import = "java.util.logging.Logger" %>
<html>
<head><title>Logger.info</title></head>
<body>
<% Logger logger = Logger.getLogger(this.getClass().getName());%>
<c:forEach var = "counter" begin = "1" end = "10" step = "1" >
<c:set var = "myCount" value = "${counter-5}" />
<c:out value = "${myCount}"/></br>
<% String message = "counter = "
+ pageContext.findAttribute("counter") + "myCount = "
+ pageContext.findAttribute("myCount");
logger.info( message );
%>
</c:forEach>
</body>
</html>
El código anterior generará un resultado similar en el navegador y en stdout.log, pero tendrá información adicional en stdout.log. Usaremos elinfométodo del registrador porque y registrar el mensaje solo con fines informativos. A continuación se muestra una instantánea del archivo stdout.log:
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 1 myCount = -4
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 2 myCount = -3
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 3 myCount = -2
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 4 myCount = -1
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 5 myCount = 0
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 6 myCount = 1
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 7 myCount = 2
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 8 myCount = 3
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 9 myCount = 4
24-Sep-2010 23:31:31 org.apache.jsp.main_jsp _jspService
INFO: counter = 10 myCount = 5
Los mensajes se pueden enviar a varios niveles utilizando las funciones de conveniencia severe(), warning(), info(), config(), fine(), finer(), y finest(). Aquí se puede utilizar el método finest () para registrar la información más fina y el método grave () para registrar información grave.
Puede usar Log4J Framework para registrar mensajes en diferentes archivos según sus niveles de gravedad e importancia.
Herramientas de depuración
NetBeans es un entorno de desarrollo integrado Java gratuito y de código abierto que admite el desarrollo de aplicaciones Java independientes y aplicaciones web que admiten las especificaciones JSP y servlet, e incluye también un depurador JSP.
NetBeans admite las siguientes funcionalidades básicas de depuración:
- Breakpoints
- Pasando por el código
- Watchpoints
Puede referirse a NetBeans documentation para comprender las funcionalidades de depuración anteriores.
Usando el depurador JDB
Puede depurar JSP y servlets con el mismo jdb comandos que utiliza para depurar un subprograma o una aplicación.
Para depurar un JSP o servlet, puede depurar sun.servlet.http.HttpServer, luego observe cómo HttpServer ejecuta JSP / servlets en respuesta a las solicitudes HTTP que hacemos desde un navegador. Esto es muy similar a cómo se depuran los subprogramas. La diferencia es que con los applets, el programa real que se está depurando essun.applet.AppletViewer.
La mayoría de los depuradores ocultan este detalle al saber automáticamente cómo depurar los subprogramas. Hasta que hagan lo mismo con JSP, debe ayudar a su depurador considerando lo siguiente:
Establezca la ruta de clases de su depurador. Esto te ayuda a encontrarsun.servlet.http.Http-Server y las clases asociadas.
Establezca la ruta de clases de su depurador. Esto le ayuda a encontrar su JSP y clases de soporte, normalmenteROOT\WEB-INF\classes.
Una vez que haya configurado la ruta de clases adecuada, comience a depurar sun.servlet.http.HttpServer. Puede establecer puntos de interrupción en cualquier JSP que le interese depurar, luego usar un navegador web para realizar una solicitud al HttpServer para el JSP dado(http://localhost:8080/JSPToDebug). La ejecución aquí se detiene en puntos de interrupción.
Uso de comentarios
Los comentarios en su código pueden ayudar al proceso de depuración de varias formas. Los comentarios se pueden utilizar de muchas otras formas en el proceso de depuración.
La JSP utiliza comentarios de Java y single line (// ...) y multiple line (/* ... */)Los comentarios se pueden utilizar para eliminar temporalmente partes de su código Java. Si el error desaparece, eche un vistazo más de cerca al código que acaba de comentar y descubra el problema.
Encabezados de cliente y servidor
A veces, cuando una JSP no se comporta como se esperaba, es útil observar la solicitud y respuesta HTTP sin procesar. Si está familiarizado con la estructura de HTTP, puede leer la solicitud y la respuesta y ver qué sucede exactamente con esos encabezados.
Consejos importantes de depuración
Aquí hay una lista de algunos consejos de depuración más sobre la depuración de JSP:
Pídale a un navegador que muestre el contenido sin procesar de la página que se muestra. Esto puede ayudar a identificar problemas de formato. Suele ser una opción del menú Ver.
Asegúrese de que el navegador no esté almacenando en caché la salida de una solicitud anterior forzando una recarga completa de la página. ConNetscape Navigator, utilizar Shift-Reload; conInternet Explorer utilizar Shift-Refresh.