Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 取消Tomcat中的请求_Java_Multithreading_Tomcat_Struts - Fatal编程技术网

Java 取消Tomcat中的请求

Java 取消Tomcat中的请求,java,multithreading,tomcat,struts,Java,Multithreading,Tomcat,Struts,我在Tomcat7中部署了一个web应用程序,其中一个事务是将文本文件加载到应用程序中,然后应用程序将逐行读取它,然后将所有记录插入数据库 我想在页面上放置一个取消按钮,让用户决定是否要取消交易,尤其是当他们上传大文件时。我想只需要在另一个页面上放一个链接,作为取消按钮。这样行吗 如果客户端上传一个15MB的文件,需要大约10分钟的处理时间,然后决定通过单击我提供的作为取消按钮的链接来取消它,线程会继续吗?一旦文件上传到服务器,启动一个线程进行处理,并将对它的引用存储在某个地方(如哈希表)并给它

我在Tomcat7中部署了一个web应用程序,其中一个事务是将文本文件加载到应用程序中,然后应用程序将逐行读取它,然后将所有记录插入数据库

我想在页面上放置一个取消按钮,让用户决定是否要取消交易,尤其是当他们上传大文件时。我想只需要在另一个页面上放一个链接,作为取消按钮。这样行吗


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

一旦文件上传到服务器,启动一个线程进行处理,并将对它的引用存储在某个地方(如哈希表)并给它一个唯一的ID。然后使用“取消”按钮将页面返回给用户,并存储先前用于在页面中保留对线程的引用的ID

当用户单击cancel时,返回哈希表,获取ID为的线程并向其发送一条消息,使其停止导入


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

我认为无法停止正在传输到服务器的请求。单击“上载”后,您将发出一个HTTP请求,并且该过程将开始,稍后单击“取消/链接u提供”,这将是一个不同的HTTP请求,因为HTTP是无状态的,它将不知道之前发生了什么或停止了什么。因此,正如预期的那样,这是不可能的。但可能有一些事情可以做到这一点,我现在还不知道。但如果按“esc”键,则会终止发送到服务器的请求。由于这是迄今为止唯一的解决方案,因此您可以在UI上编写以下javascript代码:

$('.your_link').click(function(){
        window.stop();
    });
window.stop()在IE上不起作用。对于IE,您可以使用:

document.execCommand("Stop");

因此,如果用户只单击我提供的链接,线程就不会取消?我认为@Jf Beaulac的意思是,您在Servlet/端点上编写了一个附加方法(取消方法),该方法以ID作为参数。如果用户使用ID调用该方法,则取消事务。