Servlet 教程 之 Servlet 调试 5

简介: Servlet调试是开发中的挑战,涉及复杂客户端/服务器交互。使用JDB调试器来调试HttpServer,调整类路径以包含Servlet和相关类。设置断点并在浏览器中调用Servlet以触发调试。注释代码以帮助定位问题。检查HTTP头信息对解决Servlet未按预期工作的问题也很有帮助。

Servlet 教程 之 Servlet 调试 5

Servlet 调试

测试/调试 Servlet 始终是开发使用过程中的难点。Servlet 往往涉及大量的客户端/服务器交互,可能会出现错误但又难以重现。

这里有一些提示和建议,可以帮助您调试。

使用 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 结构,您可以阅读请求和响应,看看这些头信息究竟是什么。

目录
相关文章
|
5天前
|
安全 Java 应用服务中间件
Servlet 教程 之 Servlet 简介 1
Servlet是运行在Web服务器上的Java程序,用于处理HTTP请求,充当浏览器和服务器间的中间层。它们接收用户输入,与数据库交互并动态生成网页。相比CGI,Servlet性能更优,运行在服务器地址空间内,跨平台且受安全管理器保护,可访问全部Java类库。
15 0
|
5天前
|
XML 安全 Java
Servlet 教程 之 Servlet 简介 3
Servlet是运行在Web服务器上的Java程序,用于处理HTTP请求和响应,与数据库或应用交互。相比CGI,Servlet性能更优,平台无关,并受服务器安全管理器保护。它们主要任务包括读取客户端数据、处理信息、生成结果及发送响应。Servlet利用javax.servlet和javax.servlet.http包构建,遵循Java Servlet 2.5和JSP 2.1规范,可被编译成Java类运行。
17 1
|
5天前
|
XML 缓存 安全
Servlet 教程 之 Servlet 简介 2
Servlet是Java编写的Web服务器程序,用于处理HTTP客户端请求和与服务器/数据库交互。相比CGI,Servlet性能更优,平台无关,并受服务器安全管理系统保护。Servlet的主要任务包括读取表单数据、处理HTTP请求、访问数据库、生成结果及发送响应。它们可以与applets、数据库或其他软件通信,支持多种文档格式。
18 1
|
5天前
|
缓存 小程序 Java
Servlet 教程 之 Servlet 调试 6
Servlet调试涉及大量客户端/服务器交互,常带来困难。使用JDB调试器调试HttpServer来模拟HTTP请求,需设置正确类路径,包括servlet和相关类,以及servlet和支撑类的路径。通过在Servlet代码中设置断点,通过浏览器触发请求进行调试。注释法也可辅助调试,通过暂时移除部分代码观察bug变化。查看HTTP头信息对理解Servlet行为有帮助。关键技巧包括:注意classes目录不重载,强制浏览器刷新避免缓存,确保servlet的init()方法正确处理ServletConfig。
17 3
|
5天前
|
小程序 Java
Servlet 教程 之 Servlet 调试 4
Servlet调试教程提供了使用JDB调试器的技巧。设置调试器类路径以包含HttpServer和Servlet相关类,以及Servlet本身及其支持类。在Servlet代码中设置断点,通过浏览器访问触发调试。注释法也是调试工具,通过临时移除代码段来定位问题。当bug消失时,检查所注释的代码以找到根源。
6 0
|
5天前
|
Java 应用服务中间件 API
Servlet 教程 之 Servlet 调试 2
Servlet调试常面临挑战,建议采用日志记录,推荐使用log4J。Servlet API的`log()`方法也能辅助调试,如示例代码所示,通过`ServletContext`记录消息。当参数缺失时,它能生成带有异常的日志。Tomcat容器会将这些日志保存在安装目录的logs文件夹下,有助于识别和追踪错误。在不常见异常的catch块中使用`log()`函数是良好实践。
22 8
|
5天前
|
小程序
Servlet 教程 之 Servlet 调试 3
Servlet调试是开发中的挑战,涉及复杂交互且错误难复现。使用JDB调试器,将HttpServer视为Servlet响应HTTP请求的调试目标。调试时,需配置调试器的classpath以包含HttpServer、Servlet及其相关类。为启用Servlet重载,通常将`server_root/servlets`加入classpath,但在调试时此规则有助于在加载Servlet前设置断点。在正确配置后,可在Servlet代码中设定断点,通过浏览器请求该Servlet以启动调试,程序会在断点处暂停。
31 6
|
5天前
|
Java
Servlet 教程 之 Servlet 调试 1
Servlet调试常面临挑战,尤其是复杂的客户端/服务器交互导致的错误。`System.out.println()`是常用的调试工具,用于验证代码执行和显示变量值,尤其在无需额外类的环境中,如Servlet、JSP等。它不会中断程序执行,适合时序关键的场景。调试信息会出现在Web服务器日志中,例如:`System.out.println("Debugging message")`。
15 2
|
5天前
|
容器
Servlet 教程 之 Servlet 编写过滤器 7
Servlet教程讲解如何编写过滤器。在`web.xml`中,`<filter>`定义过滤器,`<filter-name>`和`<filter-class>`分别设定名称和类。`<init-param>`配置初始化参数。`<filter-mapping>`指定过滤器作用的资源,可通过`<servlet-name>`或`<url-pattern>`定义。`<dispatcher>`定义过滤器触发时机,如REQUEST、INCLUDE、FORWARD和ERROR,控制过滤器何时拦截资源调用。
12 0
|
5天前
Servlet 教程 之 Servlet 编写过滤器 5
在Servlet教程中,了解如何编写过滤器。示例展示了定义两个过滤器:AuthenFilter和LogFilter。每个过滤器有自己的映射和初始化参数。LogFilter和AuthenFilter都匹配所有URL(/*),按照声明顺序执行。
11 3