¿Cómo puedo depurar un JSP?

26

Estoy tratando de editar un JSP para un proyecto y obtengo una NullPointerException en algún lugar del JSP cuando se solicita desde mi servidor.

Mi servidor web (JBoss) informa la excepción, pero me da un número de línea falso. Informa que la excepción ocurrió en la línea 702, pero mi JSP tiene solo 146 líneas, por lo que no puedo identificar qué línea se está ahogando.

¿Cuáles son algunas buenas técnicas para depurar errores en JSP? Estoy usando IntelliJ 9 Ultimate como mi IDE.

Gracias

ampersandre
fuente
1
se puede preguntar en
Stackoverflow.com
1
Okay. Lo sentimos, no estoy del todo claro sobre la diferencia entre StackOverflow.com y Programmers.StackExchange.com. No estoy seguro de qué preguntas pertenecen a dónde ... He leído las preguntas frecuentes para programmers.stackexchange pero es un poco vago.
ampersandre
3
En realidad, no estoy seguro de que esto esté bien en Stack Overflow. Si bien es bastante específico, no hay suficientes detalles concretos (debido a la naturaleza del problema). Lo que buscas es técnicas de depuración que deberían ser el tema de este sitio.
ChrisF
¿has incluido algún jsps dentro de tu jsp? Así es como puede aumentar el número de línea. La pregunta debe ser movida a stackoverflow
minusSeven
Una técnica es ver archivos de compilación: codeinventions.blogspot.com/2014/08/…
Suresh Atta

Respuestas:

29

Hay varias opciones que pueden ayudarlo:

  1. Esta respuesta realmente explica cómo depurar JSP específicamente: /programming/33739/jsp-debugging-in-intellij-idea . Nunca he intentado esto, así que seguí las siguientes tres sugerencias cuando estaba usando JSP, JBoss e IntelliJ ...

  2. Recuerde que los JSP se compilan en clases. Cuando dice la línea 702, significa en la clase compilada. Si es así test.jsp, el nombre de la clase es probablemente test_jsp, así que abra su directorio de trabajo JBoss y busque test_jsp.java(una vez que encuentre el directorio correcto, verá que la estructura del directorio coincide con la estructura de su directorio JSP). Cada vez que tenía una excepción JSP, podía encontrar la línea con bastante facilidad y, por lo general, hacerla coincidir con la línea correspondiente en el JSP.

  3. Los puntos de interrupción funcionan bien en clases Java llamadas desde un JSP. Entonces, tal vez pueda mover el código de script Java que tiene en su JSP a una clase y depurarlo desde el punto de entrada. En el futuro, también puede habituarse a reorganizar su lógica para que la mayoría esté en una clase que se llama desde el JSP, y el JSP es simple, directo y, con suerte, no arroja ninguna excepción. Esta es una buena práctica de todos modos.

  4. Mejor aún, elimine toda (o prácticamente toda) la lógica Java en las clases Java, dejando JSP para las etiquetas HTML y JSP. Sé que esto no es factible de inmediato, pero de nuevo, es una buena idea a largo plazo para evitar problemas como este.

Nicole
fuente
2
+1 para eliminar la lógica del JSP. Se puede ver más sobre esto en las mejores prácticas de JSP / Servlet, con la arquitectura del Modelo 2 (MVC): oracle.com/technetwork/articles/javase/servlets-jsp-140445.html
bunglestink
¡Gracias! La opción 4 es ideal, estoy de acuerdo, pero no tenemos una gran separación de vista / controlador en este proyecto.
ampersandre
1
También +1 para el ítem # 2. No tenía idea de dónde encontrar las *_jsp.javaclases.
scottyseus
2
eliminando toda la lógica de los JSP en un proyecto que tiene miles de JSP, cada uno con varios miles de líneas de scriptlets ... no, gracias, solo quiero depurar los Hashtables y los Vectores. FML :-( </rant> buena respuesta aunque
Peter Perháč
-1

Puede depurar una página JSP fácilmente como un código Java:
"un archivo JSP es lo mismo que depurar una clase Java, pero la mayoría de las funciones (Watch, Inspect, etc.) no están implementadas. La única forma de obtener los valores de las variables es la vista de Variables ".
Consulte el siguiente enlace:
https://www.laliluna.de/articles/posts/debugging-jsp-java-tutorial.html

Shadab
fuente
44
Al responder una pregunta anterior que ya tiene una respuesta bien recibida, agregue más detalles a su respuesta para que aborde algo que aún no estaba cubierto.
mosquito