English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Testen/Das Debuggen von Servlets ist immer ein Problem im Entwicklungsprozess./Serverinteraktionen können Fehler verursachen, die jedoch schwer wiederzugeben sind.
Hier sind einige Tipps und Ratschläge, die Ihnen beim Debugging helfen können.
System.out.println() wird als Marke verwendet, um zu überprüfen, ob ein bestimmtes Stück Code ausgeführt wird. Wir können auch den Wert von Variablen ausgeben. Darüber hinaus:
Da das System-Objekt ein Teil der Kernelemente von Java ist, kann es ohne Installation zusätzlicher Klassen überall verwendet werden. Dies umfasst Servlets, JSP, RMI, EJB's, einfache Beans und Klassen sowie独立的 Anwendungen.
Im Gegensatz zum Anhalten an einer Bruchstelle stört das Schreiben in System.out nicht den normalen Ablauf der Anwendung, was es in Zeiten von entscheidender Bedeutung macht.
Hier ist die Syntax für die Verwendung von System.out.println():
System.out.println("Debugging message");
Alle Nachrichten, die durch die obige Syntax generiert werden, werden im Protokollierungsdatei des Web-Servers protokolliert.
Es ist eine sehr gute Idee, alle Debugging-, Warnungs- und Fehlermeldungen mit angemessenen Protokollierungsmethoden zu protokollieren, was dringend empfohlen wird. 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 把它的文本消息记录到 Servlet 容器的日志文件中。对于 Tomcat,这些日志可以在 <Tomcat-installation-directory>/logs 目录中找到。
这些日志文件确实对新出现的错误或问题的频率给出指示。正因为如此,建议在通常不会发生的异常的 catch 子句中使用 log() 函数。
您可以使用调试 applet 或应用程序的 jdb 命令来调试 Servlet。
为了调试一个 Servlet,我们可以调试 sun.servlet.http.HttpServer,然后把它看成是 HttpServer 执行 Servlet 来响应浏览器端的 HTTP 请求。这与调试 applet 小程序非常相似。与调试 applet 不同的是,实际被调试的程序是 sun.applet.AppletViewer。
大多数调试器会自动隐藏如何调试 applet 的细节。同样的,对于 servlet,您必须帮调试器执行以下操作:
设置您的调试器的类路径 classpath,以便它可以找到 sun.servlet.http.Http-Server 和相关的类。
设置您的调试器的类路径 classpath,以便它可以找到您的 servlet 和支持的类,通常是在 server_root/servlets 和 server_root/classes 中。
您通常不会希望 server_root/servlets 在您的 classpath 中,因为它会禁用 servlet 的重新加载。但是这种包含规则对于调试是非常有用的。它允许您的调试器在 HttpServer 中的自定义 Servlet 加载器加载 Servlet 之前在 Servlet 中设置断点。
如果您已经设置了正确的类路径 classpath,就可以开始调试 sun.servlet.http.HttpServer。可以在您想要调试的 Servlet 代码中设置断点,然后通过 Web 浏览器使用给定的 Servlet(http://localhost:8080/servlet/ServletToDebug)向 HttpServer 发出请求。您会看到程序执行到断点处会停止。
Kommentare im Code helfen auf verschiedene Weise beim Debugging. Kommentare können in vielen anderen Aspekten des Debugging-Prozesses verwendet werden.
Dieses Servlet verwendet Java-Kommentare und Einz Zeilenkommentare(//...), mehrzeilige Kommentare(/* ...*/)kann verwendet werden, um Teile des Java-Code vorübergehend zu entfernen. Wenn der Bug verschwindet, betrachten Sie sorgfältig den Code, den Sie kürzlich kommentiert haben, und finden Sie das Problem.
Oft ist es sehr nützlich, den ursprünglichen HTTP-Request und die Antwort des Servlets zu überprüfen, wenn ein Servlet nicht wie erwartet funktioniert. Wenn Sie mit der HTTP-Struktur vertraut sind, können Sie die Anfragen und Antworten lesen und die Headerinformationen betrachten.
Nachfolgend sind einige Tipps zur Servlet-Debugging aufgeführt:
Bitte beachten Sie, server_root/Klassen werden nicht neu geladen, während server_root/Servlets könnten.
Erzwingen Sie das Anzeigen der ursprünglichen Inhalte der angezeigten Seite durch den Browser. Dies hilft dabei, Formatierungsprobleme zu erkennen. Dies ist in der Regel eine Option im "Ansicht"-Menü.
Stellen Sie sicher, dass der Browser noch nicht die Ausgabe der vorherigen Anfrage im Cache gespeichert hat, indem Sie die Seite vollständig neu laden. Im Netscape Navigator verwenden Sie bitte Shift-Neu laden, im Internet Explorer bitte Shift verwenden-Aktualisieren
Bitte bestätigen Sie, dass die init()-Methode des Servlets einen ServletConfig-Parameter akzeptiert und super.init(config) aufruft.