我在Tomcat 7中部署了一个Web应用程序,其中一个事务是将文本文件加载到应用程序,然后应用程序将逐行读取它,然后将所有记录插入到数据库中。
我想在页面上放置一个取消按钮,让用户决定是否要取消交易,特别是如果他们正在上传大文件。我想把一个链接转到另一个页面作为取消按钮。这有用吗?
如果客户端上传了一个15MB的文件(需要大约10分钟的时间来处理),那么线程是否会继续,然后点击我提供的取消按钮链接来决定取消它?
答案 0 :(得分:1)
将文件上传到服务器后,启动一个线程进行处理并在某处存储对它的引用(如Hashtable)并为其提供唯一ID。然后使用取消按钮将页面呈现给用户,并存储您之前使用的ID以保持对页面中线程的引用。
当用户点击取消时,返回Hashtable,获取带有ID的线程并向其发送消息以使其停止导入。
当然,阻止线程导入数据的方法需要考虑当前的数据库事务,以确保不会使数据库处于无效状态。
答案 1 :(得分:0)
我认为无法停止传输到服务器的请求。一旦你点击上传你发出一个HTTP请求,然后进程开始并在稍后点击“提供/链接你提供”,将是一个不同的HTTP请求,因为HTTP是无状态的,它不会知道任何事先发生的事情或者什么停止。正如所料,这是不可能的。但是可能有一些事情可以做到这一点,我现在还没有意识到。但是,如果按“esc”键将终止发送到服务器的请求。因为这是迄今为止唯一的解决方案,然后在UI上你可以编写这个javascript代码:
$('.your_link').click(function(){
window.stop();
});
window.stop()无法在IE上运行。对于IE,你可以使用:
document.execCommand("Stop");