Servlet 教程 之 Servlet 调试 6

简介: Servlet调试涉及大量客户端/服务器交互,常带来困难。使用JDB调试器调试HttpServer来模拟HTTP请求,需设置正确类路径,包括servlet和相关类,以及servlet和支撑类的路径。通过在Servlet代码中设置断点,通过浏览器触发请求进行调试。注释法也可辅助调试,通过暂时移除部分代码观察bug变化。查看HTTP头信息对理解Servlet行为有帮助。关键技巧包括:注意classes目录不重载,强制浏览器刷新避免缓存,确保servlet的init()方法正确处理ServletConfig。

Servlet 教程 之 Servlet 调试 6

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

重要的调试技巧

下面列出了一些 Servlet 调试的技巧:

请注意,server_root/classes 不会重载,而 server_root/servlets 可能会。
要求浏览器显示它所显示的页面的原始内容。这有助于识别格式的问题。它通常是"视图"菜单下的一个选项。
通过强制执行完全重新加载页面来确保浏览器还没有缓存前一个请求的输出。在 Netscape Navigator 中,请使用 Shift-Reload,在 Internet Explorer 中,请使用 Shift-Refresh。
请确认 servlet 的 init() 方法接受一个 ServletConfig 参数,并调用 super.init(config)。

目录
相关文章
|
6月前
|
自然语言处理 定位技术
Servlet 教程 之 Servlet 国际化 3
Servlet教程展示了如何实现国际化(i18n)和本地化(l10n),利用`request.getLocale()`获取用户区域设置,通过`DateFormat`类格式化特定区域的日期。示例代码演示了根据用户区域显示相应日期,强调了处理多语言网站的关键方法,如`getCountry()`、`getLanguage()`等。
50 6
|
4月前
|
前端开发 Java 应用服务中间件
JavaEE:Servlet后端搭建部署 一条龙全教程
JavaEE:Servlet后端搭建部署 一条龙全教程
|
6月前
|
开发框架 缓存 Java
JSP 教程 之 Eclipse JSP/Servlet 环境搭建 1
本教程指导如何使用Eclipse搭建JSP/Servlet开发环境。需下载Eclipse J2EE和Tomcat,将Tomcat解压至无中文和空格的D盘目录。启动Tomcat后,服务器运行,通过浏览器访问`http://localhost:8080/`。在Tomcat的webapps\ROOT目录创建test.jsp文件,输入代码并访问`http://localhost:8080/test.jsp`以验证环境配置成功。
98 1
|
6月前
|
小程序
Servlet 教程 之 Servlet 调试 3
Servlet调试是开发中的挑战,涉及复杂交互且错误难复现。使用JDB调试器,将HttpServer视为Servlet响应HTTP请求的调试目标。调试时,需配置调试器的classpath以包含HttpServer、Servlet及其相关类。为启用Servlet重载,通常将`server_root/servlets`加入classpath,但在调试时此规则有助于在加载Servlet前设置断点。在正确配置后,可在Servlet代码中设定断点,通过浏览器请求该Servlet以启动调试,程序会在断点处暂停。
61 6
|
6月前
|
自然语言处理 定位技术
Servlet 教程 之 Servlet 国际化 4
Servlet教程之国际化讲解了如何根据用户区域设置展示多语言内容。关键术语包括国际化(i18n)、本地化(l10n)和区域设置(locale)。Servlet通过`request.getLocale()`获取区域设置,并使用`NumberFormat`类格式化特定区域的货币。示例代码展示了如何根据客户端locale显示货币格式。
42 3
|
6月前
|
定位技术
Servlet 教程 之 Servlet 国际化 3
Servlet教程展示了如何实现国际化(i18n)和本地化(l10n)。通过request对象的getLocale()获取用户区域设置,利用DateFormat进行特定区域的日期格式化。示例代码显示了根据用户浏览器设置显示相应语言和文化的日期。
38 2
|
6月前
|
Java 关系型数据库 MySQL
Servlet 教程 之 Servlet 有用的资源
探索Servlet世界:访问Sun's Site获取官方资料,Tomcat作为开源JSP引擎,搭配MySQL Connector/J实现数据库连接。深入学习Java编程,参考The Java Tutorials及Java 2 SDK文档,免费下载Java并关注Sun Developer Network获取最新资源。
45 1
|
6月前
|
定位技术
Servlet 教程 之 Servlet 国际化 2
Servlet教程展示了如何实现网站的国际化(i18n)和本地化(l10n)。通过识别用户的区域设置(locale),Servlet可以提供不同语言版本的页面。`request.getLocale()`用于获取用户浏览器的locale。关键方法包括`getCountry()`、`getDisplayCountry()`、`getLanguage()`和`getDisplayLanguage()`,用于获取国家、语言名称及其显示形式。设置`Content-Language`头确保西欧语言的正确显示,例如在Servlet示例中,使用HTML实体显示西班牙语字符。
38 0
|
6月前
|
定位技术
Servlet 教程 之 Servlet 国际化 1
Servlet教程展示了如何实现国际化(i18n)和本地化(l10n),通过request对象的getLocale()获取用户区域设置。方法如:getCountry(), getDisplayCountry(), getLanguage(), 和 getDisplayLanguage()等用于检测语言和国家信息。实例中,Servlet展示请求的语言和国家,以响应不同区域设置的用户需求。
29 0
|
3月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
33 3