我正在构建一个相对简单的Web应用程序,在该应用程序中,主Servlet实施ServletContextListener接口以确定上下文是已启动还是已停止。我实现了我的contextInitialized,contextDestroyed,init和destroy方法(包括init和destroy调用super基类)。除了在contextInitialized加载log4j.properties文件的方法中初始化log4j之外,我目前没有实现任何实际功能。
ServletContextListener
contextInitialized
contextDestroyed
init
destroy
super
log4j.properties
但是,当我从Eclipse中启动和停止Tomcat服务器时,一切都以正确的顺序进行了调用(我正在使用System.out.println进行测试),但是在停止服务器大约10秒钟后,我会看到Eclipse弹出窗口,提示以下:
System.out.println
服务器本地主机上的Tomcat v6.0服务器未响应。您要终止此服务器吗?单击确定终止服务器,或单击取消继续等待。
这是我停止服务器时在Eclipse控制台中显示的内容:
2010年4月1日7:39:13 org.apache.catalina.core.StandardService stop 信息:停止服务Catalina contextDestroyed 04/01/2010 7:39:13 PM org.apache.coyote.http11.Http11Protocol销毁 信息:在http-8080上停止土狼HTTP / 1.1
在最后INFO一条消息之后,它会一直挂在那里,直到出现弹出窗口。如果我选择等待,请按“取消”,则Eclipse将变得不可用,并且必须从终端中终止Eclipse进程。
INFO
任何有关如何解决此问题的意见将不胜感激。
更新:
问题是由我在我的init方法中启动的非守护进程线程引起的(忘了说:)。通过使用该stop方法显式停止线程可以解决该问题,即使该方法似乎已被弃用。
stop
如该线程中所述,这应该与清理问题有关。
如果Web应用程序没有完全清除,特别是在停止非守护程序线程启动方面,则Tomcat将无法关闭。 单击“停止”具有提供超时的优势。 如果Tomcat无法在超时时间内停止,则会出现一个对话框,为您提供终止服务器或继续等待的选项。