English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Tests/Le débogage des Servlets est toujours un point difficile dans le processus de développement d'utilisation. Les Servlets impliquent souvent une grande quantité de clients/Les interactions avec le serveur peuvent entraîner des erreurs difficiles à reproduire.
Voici quelques conseils et suggestions pour vous aider à déboguer.
System.out.println() est utilisé comme un marqueur pour vérifier si un segment de code spécifique est exécuté. Nous pouvons également imprimer la valeur des variables. De plus :
Comme l'objet System fait partie intégrante des objets Java, il peut être utilisé partout sans avoir à installer de classes supplémentaires. Cela inclut Servlet, JSP, RMI, EJB's, Beans normaux et classes, ainsi que des applications indépendantes.
Contrairement à l'arrêt à un point d'arrêt, l'écriture dans System.out n'interfère pas avec le flux normal d'exécution de l'application, ce qui le rend particulièrement précieux lorsque la séquence est cruciale.
Voici la syntaxe de l'utilisation de System.out.println():
System.out.println("Message de débogage");
Tous les messages générés par la syntaxe ci-dessus seront enregistrés dans le fichier journal du serveur Web.
Utiliser une méthode de journalisation appropriée pour enregistrer toutes les messages de débogage, d'avertissement et d'erreur, c'est une excellente idée, recommandée log4J 来记录所有的消息。
Servlet API 还提供了一个简单的输出信息的方式,使用 log() 方法,如下所示:
// 导入必需的 java 库 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"); // 调用两个 ServletContext.log 方法 ServletContext context = getServletContext( ); if (par == null || par.equals("")) // 通过 Throwable 参数记录版本 context.log("No message received:", new IllegalStateException("Missing parameter")); else context.log("Here is the visitor's message: " + par); response.setContentType("text/html;charset=UTF-8"); java.io.PrintWriter out = response.getWriter( ); String title = "Context Log"; String docType = "<!DOCTYPE html> \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 textuels dans le fichier journal du conteneur Servlet. Pour Tomcat, ces journaux peuvent être trouvés dans <Tomcat-installation-directory>/trouvés dans le répertoire logs.
Ces fichiers journaux indiquent effectivement la fréquence des erreurs ou des problèmes récemment apparus. C'est pourquoi il est recommandé d'utiliser la fonction log() dans les blocs catch pour les exceptions qui ne se produisent généralement pas.
Vous pouvez utiliser la commande jdb pour déboguer un Servlet.
Pour déboguer un Servlet, nous pouvons déboguer sun.servlet.http.HttpServer et le considérer comme exécutant un Servlet pour répondre aux requêtes HTTP du côté client. Cela est très similaire au débogage d'un applet小程序. Contrairement au débogage d'un applet, le programme réellement débogué est sun.applet.AppletViewer.
La plupart des débogueurs masquent automatiquement les détails sur la manière de déboguer un applet. De même, pour un servlet, vous devez aider le débogueur à effectuer les opérations suivantes :
Configurez le chemin de classe classpath de votre débogueur afin qu'il puisse trouver sun.servlet.http.Http-Server et les classes associées.
Configurez le chemin de classe classpath de votre débogueur afin qu'il puisse trouver vos servlets et les classes prises en charge, généralement dans server_root/servlets et server_root/classes.
Vous ne voulez généralement pas que server_root/servlets sont dans votre classpath, car cela désactive le rechargement des servlets. Cependant, cette règle d'inclusion est très utile pour le débogage. Elle permet à votre débogueur de définir un point d'arrêt dans le Servlet avant que le chargeur de Servlet personnalisé de HttpServer ne charge le Servlet.
Si vous avez configuré correctement le chemin de classe classpath, vous pouvez commencer à déboguer sun.servlet.http.HttpServer. Vous pouvez définir un point d'arrêt dans le code du Servlet que vous souhaitez déboguer, puis utiliser le navigateur Web pour accéder au Servlet donné (http://localhost:8080/servlet/ServletToDebug) envoie une requête à HttpServer. Vous verrez que le programme s'arrête à l'endroit où se trouve le point d'arrêt.
Les commentaires dans le code aident à déboguer de diverses manières. Les commentaires peuvent être utilisés de nombreuses autres façons dans le processus de débogage.
Ce Servlet utilise des commentaires Java et des commentaires en une ligne (//...),les commentaires multilignes (/* ...*/)peut être utilisé pour supprimer temporairement une partie du code Java. Si le bogue disparaît, examinez soigneusement le code que vous avez commenté et trouvez la cause du problème.
Parfois, lorsque un Servlet ne fonctionne pas comme prévu, il est très utile de voir la requête HTTP originale et la réponse. Si vous êtes familier avec la structure HTTP, vous pouvez lire la requête et la réponse pour voir quels sont ces en-têtes.
Voici quelques astuces de débogage Servlet :
Veuillez noter que server_root/Les classes ne se rechargent pas, tandis que server_root/Les servlets pourraient.
Demandez au navigateur de montrer le contenu original de la page qu'il affiche. Cela aide à identifier les problèmes de format. Il s'agit généralement d'une option sous le menu "Vue".
Assurez-vous que le navigateur ne cache pas la sortie de la dernière requête en rechargeant complètement la page. Utilisez Shift dans Netscape Navigator.-Recharger, utilisez Shift dans Internet Explorer.-Rafraîchir.
Veuillez confirmer que la méthode init() du servlet accepte un paramètre ServletConfig et appelle super.init(config).