2

我在本地机器上编写了一个 Java servlet 过滤器,并将其部署为远程(机器)Web 服务器。不幸的是,尝试跟踪我的 JSP/servlet 引擎 Apache Tomcat 5.5 报告的错误非常困难且耗时。我不能一直写 System.out.println(...)、保存、部署、测试 JSP 页面等等。时间太长了 必须有更好、更快的方法。

是否可以远程调试 servlet 过滤器?我的本地机器上没有 Web 服务器,这就是我询问远程调试的原因。具体来说,我正在寻找一种方法来逐行调试 servlet 过滤器,因为它发生在远程 Web 服务器上。这样的方法存在吗?

或者,有没有比写入标准输出更好的方法。它花费的时间太长,我觉得这一定是一种更有效的调试 Java servlet 过滤器的方法。

注意:我使用 Eclipse 进行开发。

非常感谢您的帮助。

更新

谢谢大家的帮助。对此,我真的非常感激。

我将 JVM 参数添加到 Tomcat,重新启动 Tomcat。然后,在装有 Eclipse 的机器上,我在 Debug 配置中输入适当的信息,放入断点并进行测试。不幸的是,它没有用。在配置中,我将其保留为 Socket Attach,单击应用,就是这样。我按下调试按钮,它说连接被拒绝。我尝试了端口 8000 和 8001,但都没有工作。

让我解释一下我正在尝试做的事情,这可能会更好。

我有一个名为 login.jsp 的登录页面。在该页面上,是一个表单,其操作属性为 servlet/LoginServlet。当用户提交表单时,它会调用 servlet/LoginServlet,它映射到 web.xml 文件中的一个类。我们称这个类为 com.mysite.mypkg.classA。在 A 类中,它调用另一个名为 com.custom.mypkg.classB 的类的方法。我想在 B 类中放置一个断点。

因此,在 Eclipse 调试器中使用带有 login.jsp 页面的 url 不会调用它。我尝试使用 servlet/LoginServlet,但也没有用。

我应该为 URL 输入什么?或者,我要调试这种类型的设置吗?

谢谢你。

更新 2

我在这里找到了这个网站,非常全面。我运行 netstat -a 并注意到调试端口未列出。Windows 防火墙已关闭,但可能有其他东西阻塞了端口,谁知道呢。无论如何,我将 VM 参数放在这里,但它不起作用。

Tomcat 配置

谢谢你。

4

3 回答 3

2

对于远程调试,您需要以调试模式启动服务器。有几种方法可以做到这一点。1 > 使用启动服务器

catinlina.bat jpda 开始

2> 给tomcat java进程添加jvm参数

-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

以调试模式启动服务器后,您需要在 eclipse 中更改项目的透视图以进行调试。然后转到运行-> 调试配置。双击远程java应用程序并输入详细信息,例如

远程 IP 地址调试端口。默认的 tomcat 调试端口是 8000。如果使用 jvm 参数,请使用 jvm 参数中提到的端口。单击应用

转到要调试的 java 文件。在源代码中放置一个断点并运行您要测试的场景(例如使用浏览器的 Web 应用程序)

此外,请确保 java 文件中的代码与部署在远程服务器上的代码同步。

调试愉快!!!

和平。圣克劳特

于 2012-10-23T05:01:19.903 回答
2

您可以将调试器附加到正在运行的 Tomcat 实例,前提是您在启动它时为其提供了正确的命令行选项。

Tomcat 开发 Wiki解释了如何执行此操作,并且作为奖励为您提供了有关如何设置以从 Eclipse 或 NetBeans IDE 进行调试的说明。

当然,将调试器附加到正在运行的 Tomcat 对安全性和性能都有影响*

* 以及 OH&S 问题 - 如果您在错误的 tomcat 上尝试此操作,您可能会被严重划伤...

于 2012-10-23T04:38:34.483 回答
1

您应该使用以下启动参数运行远程 tomcat:

bin/catalina.bat jpda start

然后在本地机器上的 Eclipse 中运行 -> 调试配置 -> 远程 Java 应用程序,在此处创建新配置,使用远程机器的 IP 作为 a host,使用 8000 作为port那里

运行此配置并使用 Eclipse 中的断点进行调试

于 2012-10-23T04:45:05.187 回答