Tomcat没有在Eclipse中关闭

Luk*_*uke 16 java eclipse tomcat servlets

我正在构建一个相对简单的Web应用程序,其中主servlet实现ServletContextListener接口以确定上下文是已启动还是已停止.我实现了我的contextInitialized,contextDestroyed,initdestroy方法(包括initdestroy调用super基类).我目前没有实现任何真正的功能,除了我在contextInitialized加载log4j.properties文件的方法中初始化log4j .

然而,当我从Eclipse中启动和停止Tomcat服务器时,所有内容都以正确的顺序调用(我正在使用一些System.out.println来测试它)但是在停止服务器大约10秒后我会看到一个Eclipse弹出窗口说明下列:

localhost上的服务器Tomcat v6.0服务器没有响应.你想终止这台服务器吗?单击"确定"以终止服务器,或单击"取消"继续等待.

这是我停止服务器时在Eclipse控制台中打印的内容:

04/01/2010 7:39:13 PM org.apache.catalina.core.StandardService stop
INFO:停止服务Catalina
contextDestroyed
04/01/2010 7:39:13 PM org.apache.coyote.http11.Http11Protocol destroy
INFO:在http-8080上停止Coyote HTTP/1.1

在最后INFO一条消息之后,它会挂起,直到出现弹出窗口.如果我选择等待,请按取消,Eclipse变得无法使用,我必须从终端终止Eclipse进程.

任何关于如何解决这个问题的意见将不胜感激.

更新:

问题是由我在我的init方法中启动的非守护程序线程引起的(忘了提到:).通过使用该stop方法显式停止线程解决了该问题,即使该方法似乎已被弃用.

Von*_*onC 6

本主题所述,这应该与清理问题有关.

如果webapp没有完全清理,特别是在停止启动非守护程序线程时,Tomcat将无法关闭.
单击"停止"具有提供超时的优势.
如果Tomcat未能在超时内停止,将出现一个对话框,提供终止服务器或继续等待的选项.


小智 6

在Windows中打开命令提示符或PowerShell并键入

netstat -nao
Run Code Online (Sandbox Code Playgroud)

从结果和类型中找到相应端口的pid

taskkill /f /pid [port number] 
Run Code Online (Sandbox Code Playgroud)