在Tomcat中取消请求

问题描述:

我在Tomcat 7中部署了一个Web应用程序,并且其中一个事务正在将文本文件加载到应用程序中,然后应用程序将逐行读取它,然后将所有记录插入数据库。在Tomcat中取消请求

我想在页面上放一个取消按钮,让用户决定是否想要取消交易,特别是如果他们正在上传大文件。我正在考虑只是把一个链接,到另一个页面作为取消按钮。这会工作吗?

如果客户端上传一个15MB的文件(需要大约10分钟的时间才能处理),然后决定通过点击我提供的作为取消按钮的链接取消它,线程是否会继续?

一旦文件上传到服务器,启动一个线程进行处理并在某处存储引用(如Hashtable)并为其指定一个唯一的ID。然后使用取消按钮将页面呈现给用户,并存储您之前使用的ID以保持对页面中的线程的引用。

当用户单击取消时,返回到Hashtable,获取带有ID的线程并发送消息以使其停止导入。

当然,您的方法会阻止线程导入数据,因此需要考虑当前数据库事务,以确保不会使数据库处于无效状态。

+0

因此如果用户只要点击我提供的链接上的线不会取消? – JZares 2012-02-13 07:49:19

+0

我认为@Jf Beaulac暗示的是您在Servlet/Endpoint上编写了一个额外的方法(取消方法),该方法将ID作为参数。如果用户使用该ID调用该方法,则取消该事务。 – blong 2012-02-14 17:12:30

我认为不可能停止传输到服务器的请求。一旦你点击上传你发出一个HTTP请求,并且过程开始并且稍后点击“提供的cancel/link u”将会是一个不同的HTTP请求,并且由于HTTP是无状态的,它不知道什么发生了什么,停止。如预期的那样,这是不可能的。但是现在可能有些事情可以做到,我现在还不知道。但是,如果您按“Esc”键将终止发送到服务器的请求。而且,因为这是唯一的解决方案至今然后在UI上你可以写这段JavaScript代码:

$('.your_link').click(function(){ 
     window.stop(); 
    }); 

window.stop()将无法在IE浏览器。 IE浏览器,你可以使用:

document.execCommand("Stop");