我在本地计算机上编写了一个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,单击apply,就是这样。我按下调试按钮,它说连接被拒绝了。我尝试了端口8000和8001,两者都没有工作。
让我解释一下我想做的事情,这可能会更好。
我有一个名为login.jsp的登录页面。在该页面上,是一个表单,其action属性是servlet / LoginServlet。当用户提交表单时,它调用servlet / LoginServlet,它被映射到web.xml文件中的类。我们将这个类命名为com.mysite.mypkg.classA。在类A中,它从另一个名为com.custom.mypkg.classB的类调用一个方法。我想在classB中放一个断点。
因此,在Eclipse调试器中使用带有login.jsp页面的url将不会调用它。我尝试使用servlet / LoginServlet,但也没有用。
我应该为URL添加什么?或者,我是否调试此类设置?
谢谢。
更新2
我找到了这个网站here,这是非常全面的。我运行netstat -a并注意到未列出调试端口。 Windows防火墙已关闭,但可能还有另一件事阻塞了端口,谁知道。无论如何,我把VM参数放在这里并且它不起作用。
谢谢。
答案 0 :(得分:2)
您可以将调试器附加到正在运行的Tomcat实例,只要在启动它时为其提供了正确的命令行选项。
Tomcat Development Wiki解释了如何执行此操作,并且作为奖励为您提供了有关如何设置从Eclipse或NetBeans IDE进行调试的说明。
当然,将调试器附加到正在运行的Tomcat具有安全性和性能影响 * 。
*和OH& S问题 - 如果你在错误的tomcat上试过这个问题,你可能会被严重划伤......
答案 1 :(得分:1)
您应该使用以下starup参数运行远程tomcat:
bin/catalina.bat jpda start
然后在本地计算机上的Eclipse中转到Run - >调试配置 - >远程Java应用程序,在此处创建新配置,将远程计算机的IP用作host
,将8000用作port
运行此配置并使用Eclipse中的断点进行调试
答案 2 :(得分:1)
对于远程调试,您需要以调试模式启动服务器。有几种方法可以做到这一点。 1>使用
启动服务器catinlina.bat jpda start
2>将一个jvm参数添加到tomcat java进程
-Xdebug -Xrunjdwp:transport = dt_socket,address = 8000,server = y,suspend = n
在调试模式下启动服务器后,您需要在eclipse中更改项目的透视图以进行调试。 然后去Run - >调试配置。 双击远程Java应用程序并输入详细信息,如
远程IP地址 调试端口。默认的tomcat调试端口是8000.如果使用jvm参数,请使用jvm参数中提到的端口。 单击“应用”
转到要调试的java文件。 在源代码中放置一个断点并运行您要测试的场景(例如使用浏览器的Web应用程序)
另外,请确保java文件中的代码与远程服务器上部署的代码同步。
快乐调试!!!
和平。 Sanket Raut