Servlets - Débogage

Il est toujours difficile de tester / déboguer des servlets. Les servlets ont tendance à impliquer une grande quantité d'interactions client / serveur, ce qui rend les erreurs probables mais difficiles à reproduire.

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

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. De plus -

  • É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. Cela inclut les servlets, les JSP, les RMI, les EJB, les Beans ordinaires et les classes et les applications autonomes.

  • La technique d'arrêt aux points d'arrêt arrête l'exécution normale et prend donc plus de temps. Alors que 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 le timing est crucial.

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

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

Tous les messages générés par la syntaxe ci-dessus seraient enregistrés dans le fichier journal du serveur Web.

Journalisation des messages

Il est toujours judicieux d'utiliser une méthode de journalisation appropriée pour enregistrer tous les messages de débogage, d'avertissement et d'erreur à l'aide d'une méthode de journalisation standard. J'utilise log4J pour enregistrer tous les messages.

L'API Servlet fournit également un moyen simple de générer des informations en utilisant la méthode log () comme suit -

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ContextLog extends HttpServlet {
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, java.io.IOException {
    
      String par = request.getParameter("par1");
      
      //Call 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( );
      String title = "Context Log";
      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</h2>\n" +
            "</body>
         </html>"
      );
   } //doGet
}

ServletContext enregistre ses messages texte dans le fichier journal du conteneur de servlet. Avec Tomcat, ces journaux se trouvent dans <Tomcat-installation-directory> / logs.

Les fichiers journaux donnent une indication des nouveaux bogues émergents ou de la fréquence des problèmes. Pour cette raison, il est bon d'utiliser la fonction log () dans la clause catch des exceptions qui ne devraient normalement pas se produire.

Utilisation du débogueur JDB

Vous pouvez déboguer les servlets avec les mêmes commandes jdb que vous utilisez pour déboguer une applet ou une application.

Pour déboguer un servlet, nous débogageons sun.servlet.http.HttpServer et observons attentivement pendant que HttpServer exécute les servlets en réponse aux requêtes HTTP faites à partir du 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 est sun.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 les servlets, vous devez aider votre débogueur en procédant comme suit:

  • Définissez le chemin d'accès aux classes de votre débogueur afin qu'il puisse trouver sun.servlet.http.Http-Server et les classes associées.

  • Définissez le chemin de classe de votre débogueur afin qu'il puisse également trouver vos servlets et classes de support, généralement racine_serveur / servlets et racine_serveur / classes.

Normalement, vous ne voudriez pas racine_serveur / servlets dans votre chemin de classe car cela désactive le rechargement des servlets. Cette inclusion, cependant, est utile pour le débogage. Il permet à votre débogueur de définir des points d'arrêt dans un servlet avant que le chargeur de servlet personnalisé dans HttpServer ne charge le servlet.

Une fois que vous avez défini le chemin de classe approprié, démarrez le débogage de sun.servlet.http.HttpServer. Vous pouvez définir des points d'arrêt dans le servlet que vous souhaitez déboguer, puis utiliser un navigateur Web pour faire une requête au serveur HttpServer pour le servlet donné (http: // localhost: 8080 / servlet / ServletToDebug). Vous devriez voir l'exécution s'arrêter à vos 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 servlet utilise des commentaires Java et des commentaires sur une seule ligne (// ...) et sur plusieurs lignes (/ * ... * /) 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'un servlet 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 exactement 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 de servlet -

  • Rappelez-vous que racine_serveur / classes ne se recharge pas et que racine_serveur / servlets le fait probablement.

  • 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. Avec Netscape Navigator, utilisez Shift-Reload; avec Internet Explorer, utilisez Shift-Refresh.

  • Vérifiez que la méthode init () de votre servlet prend un paramètre ServletConfig et appelle immédiatement super.init (config).