2010-04-22 152 views
0

我有一个运行在本地tomcat服务器上的web应用程序。如何在关闭浏览器窗口时关闭本地tomcat服务器?

当用户启动应用程序(通过桌面快捷方式)时,服务器启动,应用程序在浏览器窗口中打开。 但是,当用户只需点击关闭按钮停止应用程序,服务器仍在后台运行 - 这很烦人。

我试图从javascript中使用“unonload”和“onbeforeunload”事件,但不幸的是,这些事件也被应用程序中的其他请求触发。 所以我不能使用它们,除非我做了很多重构。

有没有人有一个可能的解决方案的想法?

顺便说一句,我觉得有趣的是Visual Studio调试Web应用程序时的行为。当我关闭浏览器窗口时,Visual Studio也会触发停止调试模式。因此,它似乎注意到浏览器窗口的关闭事件,这正是我所需要的。但我不知道他们是怎么做的......

+1

过去我们有类似的要求,但最终说服用户有另一个桌面快捷方式来停止应用程序。 – JoseK 2010-04-23 06:41:40

回答

0

您可以设置一个短会话超时,并使用HttpSessionListener。在sessionDestroyed(..)你可以阻止tomcat(例如使用catalina.bat)。

否则,您可以尝试使用detect browser close,并使用ajax(在浏览器关闭之前)向服务器发送关闭消息。

+0

感谢您的回答! 在某些系统上,应用程序会一直运行,但只能不时使用。所以,当我设置一个短会话超时,并对sessionDestroyed(..)行事恐怕该应用程序不可用时,用户需要他们。所以我真的必须知道用户何时关闭浏览器窗口。 – agez 2010-04-23 12:05:57

+0

@agez看到我的更新 – Bozho 2010-04-25 06:01:20

1

你可以包装Tomcat的启动并启动你的应用程序在批处理文件或shell脚本? (不知道你的目标操作系统是什么...)

该脚本/批处理文件将启动Tomcat,然后启动您的应用程序。当用户退出应用程序时,脚本/批处理文件会关闭Tomcat。

+0

感谢您的答案! 目标操作系统是Windows,我实际上是通过批量启动应用程序和服务器。但是用户通常通过浏览器窗口的关闭按钮来关闭应用程序...并且tomcat一直在运行... – agez 2010-04-23 12:00:28

+0

好的,但是您也可以在启动和停止Tomcat的同一批处理文件中启动应用程序吗? 即application.bat: 启动tomcat yourapp.exe tomcat的停止 除非你做一个 “开始yourapp.exe”,运行yourapp将暂停批量处理,直至退出。当它退出时,应该关闭tomcat。 关键是将所有这些放在一个批处理文件中。 – kmontgom 2010-04-23 12:05:34

+0

不幸的是,这并不是正确的评论。在批处理文件中:tomcat start yourapp.exe tomcat stop 。 我不记得catalina命令参数来启动和停止tomcat。 – kmontgom 2010-04-23 12:07:34