Es ist immer schwierig, ein JSP- oder Servlet-Programm zu testen/debuggen. JSP- und Servlets-Programme beinhalten in der Regel viele Client-/Server-Interaktionen, was sehr wahrscheinlich zu Fehlern führt und es schwierig ist, die Fehlerumgebung zu reproduzieren.
Als Nächstes geben wir einige Tipps und Vorschläge, die Ihnen beim Debuggen Ihres Programms helfen.
System.out.println() kann leicht markieren, ob ein Code ausgeführt wurde. Natürlich können wir auch verschiedene Werte ausdrucken. Auch:
Da das Systemobjekt zu einem Java-Kernobjekt wurde, kann es überall verwendet werden, ohne dass zusätzliche Klassen eingeführt werden müssen. Der Nutzungsumfang umfasst Servlets, JSP, RMI, EJBs, Beans, Klassen und eigenständige Anwendungen.
Im Vergleich zum Stoppen der Ausführung an einem Haltepunkt hat die Verwendung von System.out zur Ausgabe keine wesentlichen Auswirkungen auf den laufenden Prozess der Anwendung. Diese Funktion ist in Anwendungen sehr nützlich, bei denen der Timing-Mechanismus sehr wichtig ist.
Als nächstes wird die Syntax für die Verwendung von System.out.println() angegeben:
System.out.println("Debugging-Meldung");Hier ist ein einfaches Beispiel mit 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>Wenn Sie nun das obige Beispiel ausführen, werden die folgenden Ergebnisse erzielt:
-4-3-2-1012345Wenn Sie einen Tomcat-Server verwenden, finden Sie in der Datei stdout.log im Protokollverzeichnis den folgenden zusätzlichen Inhalt:
Zähler=1Zähler=2Zähler=3Zähler=4Zähler=5Zähler=6Zähler=7Zähler=8Zähler=9Zähler=10Mit dieser Methode können Variablen und andere Informationen zur Analyse und Suche nach der zugrunde liegenden Ursache des Problems in das Systemprotokoll ausgegeben werden.
Das J2SE-Protokollierungsframework stellt Protokollierungsdienste für jede in der JVM ausgeführte Klasse bereit. Wir können dieses Framework also verwenden, um beliebige Informationen aufzuzeichnen.
Schreiben wir den obigen Code um, um die Logger-API im JDK zu verwenden:
<%@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"( message ); :forEach></body></html>Die Ergebnisse ähneln denen des vorherigen, es können jedoch zusätzliche Informationen in die Datei stdout.log ausgegeben werden. Hier verwenden wir die Info-Methode im Logger. Nachfolgend geben wir einen Schnappschuss der stdout.log-Datei:
24. September 2013 23:31:31 org.apache.jsp.main_jsp _jspServiceINFO: counter=1 myCount=-424.09.2013 23:31:31 org.apache.jsp.main_jsp _jspServiceINFO: counter=2 myCount=- 324-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspServiceINFO: counter=3 myCount=-224-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspServiceINFO: counter=4 myCount=-124-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspServiceINFO: counter=5 myCount=024-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspServiceINFO: counter=6 myCount=124-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspServiceINFO: counter= 7myCount=224-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspServiceINFO: counter=8 myCount=324-Sep-2013 23:31:31 org.apache.jsp.main_jsp _jspServiceINFO: counter=9 myCount=424-Sep-2013 23: 31:31 org.apache.jsp.main_jsp _jspServiceINFO: counter=10 myCount=5Nachrichten können mit verschiedenen Prioritäten gesendet werden, indem die Methoden sever(), warning(), info(), config(), fine(), finer() undfinest() verwendet werden. Die Methode „finest()“ wird zum Aufzeichnen der besten Informationen und die Methode „sever()“ zum Aufzeichnen der schwerwiegendsten Informationen verwendet.
Verwenden Sie das Log4J-Framework, um Nachrichten in verschiedenen Dateien zu protokollieren, die nach Schweregrad und Wichtigkeit klassifiziert werden.
NetBeans ist eine Baumstruktur und eine umfassende Open-Source-Java-Entwicklungsumgebung, die die Entwicklung unabhängiger Java-Anwendungen und Netzwerkanwendungen sowie das JSP-Debugging unterstützt.
NetBeans unterstützt die folgenden grundlegenden Debugging-Funktionen:
Haltepunkt
Einzelschrittverfolgung
Beobachtungspunkt
Detaillierte Informationen finden Sie im NetBeans-Handbuch.
Sie können JDB-Befehle in JSPs und Servlets zum Debuggen wie bei normalen Anwendungen verwenden.
Normalerweise debuggen wir das sun.servlet.http.HttpServer-Objekt direkt, um zu sehen, wie HttpServer JSP/Servlets als Reaktion auf HTTP-Anfragen ausführt. Dies ist dem Debuggen von Applets sehr ähnlich. Der Unterschied besteht darin, dass das Applet-Programm tatsächlich sun.applet.AppletViewer debuggt.
Die meisten Debugger können beim Debuggen von Applets einige Details automatisch ignorieren, da sie wissen, wie man Applets debuggt. Wenn Sie das Debugging-Objekt an JSP übertragen möchten, müssen Sie die folgenden zwei Dinge tun:
Legen Sie den Klassenpfad des Debuggers so fest, dass er sun.servlet.http.Http-Server und verwandte Klassen finden kann.
Legen Sie den Klassenpfad des Debuggers fest, damit er Ihre JSP-Dateien und zugehörigen Klassen finden kann.
Nachdem Sie den Klassenpfad festgelegt haben, beginnen Sie mit dem Debuggen von sun.servlet.http.Http-Server. Sie können an einer beliebigen Stelle in der JSP-Datei einen Haltepunkt festlegen und dann mit dem Browser eine Anfrage an den Server senden. Das Programm sollte dann am Haltepunkt anhalten.
Kommentare im Programm spielen in vielerlei Hinsicht eine gewisse Rolle beim Debuggen des Programms. Kommentare können in vielen Aspekten des Debuggens eines Programms verwendet werden.
JSP verwendet Java-Annotationen. Wenn ein Fehler verschwindet, werfen Sie einen genaueren Blick auf den Code, den Sie gerade kommentiert haben. Normalerweise können Sie dann herausfinden, warum.
Manchmal ist es auch nützlich, die rohen HTTP-Anfragen und -Antworten anzuzeigen, wenn sich die JSP nicht wie beabsichtigt verhält. Wenn Sie mit der Struktur von HTTP vertraut sind, können Sie die Anfrage und Antwort direkt beobachten und sehen, was mit diesen Header-Modulen passiert.
Hier verraten wir zwei weitere Tipps zum Debuggen von JSP:
Verwenden Sie einen Browser, um den ursprünglichen Seiteninhalt anzuzeigen, um zu erkennen, ob ein Formatproblem vorliegt. Diese Option befindet sich normalerweise im Menü „Ansicht“.
Stellen Sie sicher, dass der Browser die vorherige Anforderungsausgabe nicht erfasst, wenn Sie das Neuladen der Seite erzwingen. Wenn Sie den Netscape Navigator-Browser verwenden, verwenden Sie Shift-Reload; wenn Sie den IE-Browser verwenden, verwenden Sie Shift-Refresh.