接近

2011-11-21 81 views
-1

页上的停止JSP处理我有这个页面:接近

<%@page language="java"%> 
<html> 
    <head></head> 
    <body> 
     <% while(true) System.out.println("foo"); %> 
    </body> 
</html> 

,我希望当我关闭浏览器,会话到期之前停止该页面执行。

我的想法是使用JavaScript捕获onunload事件,使用AJAX将线程ID回发到servlet /另一个JSP,并在一段时间后(即15秒)残酷地终止线程。

这是正确的吗?可能吗?有什么更好的想法

+1

为什么你会有这样的JSP页面? – BalusC

+0

这是一个简化,我有一些jsp/servlets在数据库上执行长时间运行的过程,处理图形。有时我需要在这些程序自然完成之前停止,有时我希望这些程序与客户绑定,因为如果客户断开连接,就无法查看结果...所以宝贵的资源完全被浪费了...... –

+0

在Java EE环境中手动产生非托管线程是非常糟糕的做法。如果您有100个甚至更少的访问者同时执行此操作,则必须重新启动服务器,因为它完全被锁定。相反,您应该使用具有任务队列的固定线程池和执行程序服务。大多数容器都支持这个功能。对于一些指针,请检查这些答案:http://stackoverflow.com/q/5357856和http://stackoverflow.com/q/6151574 – BalusC

回答

0

你可以哈瓦JSP页面已停止从客户端异步收到的消息后写,如:网页那张写

1),如你所提到的。

2)每写完一次,它就可以检查消息队列或数据库,以指示它应该停止流数据。由于JSP运行到服务器,它没有任何连接到客户端,所以这个检查必须与浏览器分离。

但是,根据评论---它不清楚这是必要的。

+0

由于我的应用程序是非常大的,这不是一个有效的路线。我正在寻找一些“黑客”来普遍适用于每一个现有的程序。另一件我不明白的事情是,如果'out.print()'不会失败,即使客户端正在监听不到更多... –

+0

它可能是一个有效的解决方案(非常脏但仍然有效)if 'out.print()'会抛出Exception,因为这些循环中的大部分都是使用'out.print()'的“报告” –