JSP - Débogage

Dans ce chapitre, nous aborderons le débogage d'une JSP. Il est toujours difficile de tester / déboguer une JSP et des servlets. JSP et servlets ont tendance à impliquer une grande quantité d'interaction client / serveur, ce qui rend les erreurs probables mais difficiles à reproduire.

Voici quelques conseils et suggestions qui peuvent vous aider dans votre débogage.

Utilisation de System.out.println ()

System.out.println()est facile à utiliser comme marqueur pour tester si un certain morceau de code est en cours d'exécution ou non. Nous pouvons également imprimer des valeurs de variables. Considérez les points supplémentaires suivants -

  • Étant donné que l'objet System fait partie des objets Java de base, il peut être utilisé partout sans avoir besoin d'installer de classes supplémentaires. Ceci comprendServlets, JSP, RMI, EJB's, ordinary Beans et classes, et standalone applications.

  • Par rapport à l'arrêt aux points d'arrêt, l'écriture dans System.out n'interfère pas beaucoup avec le flux d'exécution normal de l'application, ce qui la rend très utile lorsque l'iming est cruciale.

Voici la syntaxe à utiliser System.out.println() -

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

L'exemple suivant montre comment utiliser 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>

Accédez à la JSP ci-dessus, le navigateur affichera le résultat suivant -

-4
-3
-2
-1
0
1
2
3
4
5

Si vous utilisez Tomcat, vous trouverez également ces lignes ajoutées à la fin de stdout.log dans le répertoire des journaux.

counter = 1
counter = 2
counter = 3
counter = 4
counter = 5
counter = 6
counter = 7
counter = 8
counter = 9
counter = 10

De cette façon, vous pouvez importer des variables et d'autres informations dans le journal système qui peuvent être analysées pour découvrir la cause profonde du problème ou pour diverses autres raisons.

Utilisation de l'enregistreur JDB

le J2SELe framework de journalisation est conçu pour fournir des services de journalisation pour toute classe exécutée dans la JVM. Nous pouvons utiliser ce cadre pour enregistrer toute information.

Réécrivons l'exemple ci-dessus en utilisant l'API JDK logger -

<%@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>

Le code ci-dessus générera un résultat similaire sur le navigateur et dans stdout.log, mais vous aurez des informations supplémentaires dans stdout.log. Nous utiliserons leinfométhode de l'enregistreur car et enregistrez le message uniquement à des fins d'information. Voici un aperçu du fichier 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

Les messages peuvent être envoyés à différents niveaux en utilisant les fonctions pratiques severe(), warning(), info(), config(), fine(), finer(), et finest(). Ici, la méthode finest () peut être utilisée pour enregistrer les informations les plus fines et la méthode severest () peut être utilisée pour enregistrer les informations graves.

Vous pouvez utiliser Log4J Framework pour consigner les messages dans différents fichiers en fonction de leur niveau de gravité et de leur importance.

Outils de débogage

NetBeans est un environnement de développement intégré Java gratuit et open-source qui prend en charge le développement d'applications Java autonomes et d'applications Web prenant en charge les spécifications JSP et servlet et comprend également un débogueur JSP.

NetBeans prend en charge les fonctionnalités de débogage de base suivantes -

  • Breakpoints
  • Parcourir le code
  • Watchpoints

Vous pouvez vous référer à NetBeans documentation pour comprendre les fonctionnalités de débogage ci-dessus.

Utilisation du débogueur JDB

Vous pouvez déboguer JSP et servlets avec le même jdb commandes que vous utilisez pour déboguer une applet ou une application.

Pour déboguer une JSP ou un servlet, vous pouvez déboguer sun.servlet.http.HttpServer, puis observez que HttpServer exécute les JSP / servlets en réponse aux requêtes HTTP que nous faisons à partir d'un navigateur. Ceci est très similaire à la façon dont les applets sont débogués. La différence est qu'avec les applets, le programme en cours de débogage estsun.applet.AppletViewer.

La plupart des débogueurs cachent ce détail en sachant automatiquement comment déboguer les applets. Jusqu'à ce qu'ils fassent de même pour JSP, vous devez aider votre débogueur en tenant compte de ce qui suit -

  • Définissez le chemin de classe de votre débogueur. Cela vous aide à trouversun.servlet.http.Http-Server et les classes associées.

  • Définissez le chemin de classe de votre débogueur. Cela vous aide à trouver votre JSP et les classes de support, généralementROOT\WEB-INF\classes.

Une fois que vous avez défini le chemin de classe approprié, démarrez le débogage sun.servlet.http.HttpServer. Vous pouvez définir des points d'arrêt dans la JSP que vous souhaitez déboguer, puis utiliser un navigateur Web pour faire une demande au HttpServer pour la JSP donnée(http://localhost:8080/JSPToDebug). L'exécution s'arrête ici aux points d'arrêt.

Utilisation des commentaires

Les commentaires dans votre code peuvent aider le processus de débogage de différentes manières. Les commentaires peuvent être utilisés de nombreuses autres manières dans le processus de débogage.

Le JSP utilise des commentaires Java et single line (// ...) et multiple line (/* ... */)Les commentaires peuvent être utilisés pour supprimer temporairement des parties de votre code Java. Si le bogue disparaît, examinez de plus près le code que vous venez de commenter et découvrez le problème.

En-têtes client et serveur

Parfois, lorsqu'une JSP ne se comporte pas comme prévu, il est utile de regarder la requête et la réponse HTTP brutes. Si vous connaissez la structure de HTTP, vous pouvez lire la requête et la réponse et voir ce qui se passe exactement avec ces en-têtes.

Conseils de débogage importants

Voici une liste de quelques autres conseils de débogage sur le débogage JSP -

  • Demandez à un navigateur d'afficher le contenu brut de la page qu'il affiche. Cela peut aider à identifier les problèmes de formatage. C'est généralement une option dans le menu Affichage.

  • Assurez-vous que le navigateur ne met pas en cache la sortie d'une requête précédente en forçant un rechargement complet de la page. AvecNetscape Navigator, utilisation Shift-Reload; avecInternet Explorer utilisation Shift-Refresh.