这里有一些提示和建议,可以帮助您调试。
System.out.println()
System.out.println() 是作为一个标记来利用的,用来测试一段特定的代码是否被实行。我们也可以打印出变量的值。此外:
由于 System 工具是核心 Java 工具的一部分,它可以在不须要安装任何额外类的情形下被用于任何地方。这包括 Servlet、JSP、RMI、EJB's、普通的 Beans 和类,以及独立的运用程序。
与在断点处停滞不同,写入到 System.out 不会滋扰到运用程序的正常实行流程,这使得它在时序是至关主要的时候显得尤为有代价。下面是利用 System.out.println() 的语法:
System.out.println(\"大众Debugging message\公众);
通过上面的语法天生的所有将被记录在 Web 做事器日志文件中。
日志
利用适当的日志记录方法来记录所有调试、警告和缺点,这是非常好的想法,推举利用 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() 函数。
利用 JDB 调试器
您可以利用调试 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 发出要求。您会看到程序实行到断点处会停滞。
利用注释
代码中的注释有助于以各种办法进行调试。注释可用于调试过程的很多其他办法中。
该 Servlet 利用 Java 注释和单行注释(//...),多行注释(/ .../)可用于暂时移除部分 Java 代码。如果 bug 消逝,仔细看看您刚才注释的代码并找出问题所在。
客户端和做事器端头信息
有时,当一个 Servlet 并没有像预期那样时,查看原始的 HTTP 要乞降相应是非常有用的。如果您熟习 HTTP 构造,您可以阅读要乞降相应,看看这些头信息究竟是什么。
主要的调试技巧
下面列出了一些 Servlet 调试的技巧:
请把稳,server_root/classes 不会重载,而 server_root/servlets 可能会。
哀求浏览器显示它所显示的页面的原始内容。这有助于识别格式的问题。它常日是\"大众视图\"大众菜单下的一个选项。
通过逼迫实行完备重新加载页面来确保浏览器还没有缓存前一个要求的输出。在 Netscape Navigator 中,请利用 Shift-Reload,在 Internet Explorer 中,请利用 Shift-Refresh。
请确认 servlet 的 init() 方法接管一个 ServletConfig 参数,并调用 super.init(config)。