Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在远程机器上动态调试Java servlet过滤器(我使用Eclipse和Apache Tomcat 5.5)_Java_Debugging_Servlets_Servlet Filters_Remote Debugging - Fatal编程技术网

如何在远程机器上动态调试Java servlet过滤器(我使用Eclipse和Apache Tomcat 5.5)

如何在远程机器上动态调试Java servlet过滤器(我使用Eclipse和Apache Tomcat 5.5),java,debugging,servlets,servlet-filters,remote-debugging,Java,Debugging,Servlets,Servlet Filters,Remote Debugging,我在本地机器上编写了一个JavaServlet过滤器,并将其部署到远程(机器)web服务器上。不幸的是,试图跟踪ApacheTomcat5.5(我的JSP/servlet引擎)报告的错误是非常困难和耗时的。我无法继续编写System.out.println(…),保存、部署、测试JSP页面等等。时间太长了。必须有更好更快的方法 是否可以远程调试servlet过滤器?我的本地机器上没有web服务器,这就是我询问远程调试的原因。具体地说,我正在寻找一种在远程web服务器上实时调试servlet过滤器

我在本地机器上编写了一个JavaServlet过滤器,并将其部署到远程(机器)web服务器上。不幸的是,试图跟踪ApacheTomcat5.5(我的JSP/servlet引擎)报告的错误是非常困难和耗时的。我无法继续编写System.out.println(…),保存、部署、测试JSP页面等等。时间太长了。必须有更好更快的方法

是否可以远程调试servlet过滤器?我的本地机器上没有web服务器,这就是我询问远程调试的原因。具体地说,我正在寻找一种在远程web服务器上实时调试servlet过滤器的方法。这种方法存在吗

或者,还有比写入标准输出更好的方法吗。它花费的时间太长,我觉得这应该是调试Javaservlet过滤器的更有效的方法

注意:我正在使用Eclipse进行开发

非常感谢你的帮助

更新

谢谢大家的帮助。我真的很感激

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

让我解释一下我想做什么,那样可能更好

我有一个名为login.jsp的登录页面。在该页面上,是一个其操作属性为servlet/LoginServlet的表单。当用户提交表单时,它调用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实例时为其提供了正确的命令行选项,则可以将调试器附加到正在运行的Tomcat实例

说明了如何做到这一点,另外,还提供了有关如何设置以从Eclipse或NetBeans IDE进行调试的说明

当然,将调试器附加到运行中的Tomcat会带来安全性和性能方面的影响*


*职业健康和安全问题-如果你在错误的tomcat上尝试,你可能会被严重划伤

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

bin/catalina.bat jpda start
然后在本地机器上的Eclipse中运行->调试配置->远程Java应用程序,在此处创建新配置,将远程机器的IP用作
主机,将8000用作
端口


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

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

catinlina.bat jpda开始

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

-Xdebug-Xrunjdwp:transport=dt_套接字,地址=8000,服务器=y,挂起=n

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

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

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

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

调试快乐

和平。
Sanket Raut

为什么你的电脑上没有一个Tomcat。我甚至不能考虑在没有本地Servlet引擎的情况下开发Servlet应用程序?噩梦:-)非常感谢。我会试试这个。因此,主机是server1.myhost.com,通常在端口80上运行。对于调试,基本上应该是server1.myhost.com:8000?是的,无论tomcat运行在哪个端口上,默认情况下都应该使用8000进行调试。非常感谢。我试过了,但没用。我将jvm参数添加到tomcat,重新启动tomcat,然后转到eclipse中的调试配置(位于另一台机器上)。输入信息,输入断点,然后进行测试。我将编辑我的问题并解释它。我尝试了第二种方法,将其添加为jvm参数(请参阅问题中的更新3),但它不起作用。我在问题中链接的站点说使用了tomcat的第一种方法,我做到了。我不得不修改JAVA_HOME变量以指向JDK文件夹,并设置了几个其他环境变量,现在它可以工作了。非常感谢你们的帮助和所有做出贡献的人。非常感谢你们的帮助。我很感激。