Servlet 调试
测试/调试 Servlet 始终是开发使用过程中的难点。Servlet 往往涉及大量的客户端/服务器交互,可能会出现错误但又难以重现。
这里有一些提示和建议,可以帮助您调试。
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"); 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 把它的文本消息记录到 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)。
相关推荐
《深入理解HTTPWatcher:强大的JSP与Servlet调试神器》 在Web开发领域,尤其是在Java环境中,JSP(JavaServer Pages)和Servlet是构建动态网站的重要技术。然而,调试这两个技术时,开发者往往需要面对复杂的请求...
这对于优化性能、调试问题以及自定义Servlet行为都非常有帮助。 在实际开发中,我们通常不会直接实现`Servlet`接口,而是继承`HttpServlet`类,因为它已经为我们提供了一些基础的HTTP方法实现。例如,`doGet()`和`...
本题集主要考察Java的基础知识,包括线程管理、构造函数、异常处理、接口、多态性、Struts框架、FormBean、Servlet调试、Session使用、URL重写、JavaBeans规范以及MVC设计模式等核心概念。 1. 线程管理:线程的终止...
- 为了简化开发阶段的调试,可以开启Tomcat的servlet调试器,使得Servlet可以在不需要修改web.xml的情况下进行部署和测试。 3. JSP页面的开发与部署: - JSP技术允许开发者将Java代码嵌入到HTML页面中,使得生成...
Java笔试面试题涉及了多个Java核心概念和技术,包括线程管理、构造函数、异常处理、接口、多态性、Struts框架、FormBean、Servlet调试、Session使用、JSP标签和MVC设计模式等。以下是这些知识点的详细解释: 1. **...
### JDK1.5与Tomcat5.0配置...以上步骤详细介绍了如何配置JDK1.5和Tomcat5.0,以及如何进行简易的JSP和Servlet调试。通过这些步骤,你可以确保开发环境正确无误地搭建起来,并能够顺利进行Web应用程序的开发和测试。
对于学习和调试Servlet,理解其内部源码非常有益。例如,`HttpServletRequest`和`HttpServletResponse`是如何封装HTTP请求和响应的,`service()`方法如何根据请求类型选择适当的方法执行等。 九、实战应用 在实际...
3. **Servlet调试方法** - 使用打印语句:在代码中添加System.out.println()输出调试信息。 - TOMCAT日志:查看Tomcat服务器的日志输出,分析异常和错误信息。 - 返回错误页面:通过异常处理,将错误信息显示在...
3. **调试与日志**:插件通常提供日志记录和调试工具,帮助开发者跟踪问题。 4. **性能优化**:通过调整Servlet容器的配置,如线程池大小、连接超时等,可以优化Web应用的性能。 总结,Servlet插件是Java Web开发中...
`ServletInfo`方法返回Servlet的相关信息,如开发者、版本等,主要用于文档和调试目的。 总的来说,Servlet是Java Web开发中不可或缺的一部分,它允许我们用Java代码处理HTTP请求,实现动态网页和服务器端业务逻辑...
Servlet是Java Web开发中的一个重要组件,它用于扩展服务器的功能,处理客户端的请求并返回响应。在"简单的servlet例子新闻网站 全"这个项目中,我们...在实际操作中,建议结合源码逐步调试,加深对每个环节的理解。
6. **运行与调试** 压缩包中的"serlvet"文件可能包含了整个Web应用的结构,包括`web.xml`、Servlet源代码以及必要的库文件。解压后,在本地Tomcat服务器中部署,通过浏览器访问`http://localhost:8080/应用名/...
Servlet框架是Java Web开发中的核心组件,主要用于处理和...通过MyEclipse等IDE,我们可以快速地搭建和调试Servlet应用,进一步提升开发效率。在实际项目中,结合MVC模式和现代Servlet框架,可以实现更复杂的业务需求。
Servlet是Java Web开发中的核心组件,它是一种...结合源码分析和适当的工具,如调试器和日志记录,可以更好地理解和优化Servlet的性能。在实际项目中,熟练运用Servlet能帮助开发者构建出功能强大、扩展性强的Web应用。
对于“工具”标签,可能涉及到开发环境的搭建,如使用Apache Tomcat服务器运行Servlet,或者使用IDE如Eclipse或IntelliJ IDEA的插件来简化Servlet的开发和调试。 在“练习Servlet”的过程中,你可能还会接触到MVC...
这可能涉及到如何部署Servlet应用到服务器,以及调试和优化Servlet性能等实践技能。 总的来说,这个"Servlet培训课件(中软国际)"全面覆盖了Servlet的基础和进阶内容,对于想在J2EE领域深入发展的学员来说是一份...
11. **部署与调试**:了解如何在Tomcat、Jetty等Servlet容器中部署Web应用,以及如何使用日志、调试工具等进行问题排查。 深入学习Java Servlet,不仅可以掌握Web开发的基础,还能为学习Spring MVC、Struts等高级...