Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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 servlet如何确定何时取消上载?_Java_Javascript_Servlets - Fatal编程技术网

Java servlet如何确定何时取消上载?

Java servlet如何确定何时取消上载?,java,javascript,servlets,Java,Javascript,Servlets,下面是javascript端用于基于表单上传的一些代码: iframe.setAttribute('src', 'javascript:false;'); 我使用上面的代码来取消与放置在iframe中的输入元素相关联的正在进行的上载 我正在使用下面的代码取消通过XHR发送的正在进行的上载: myxhr.abort(); 在这两种情况下,不再向servlet发送更多字节。我正在努力解决的部分是servlet方面。目前,我无法找到让servlet实例确定用户是否已取消上载的方法。这是至关重要的,

下面是javascript端用于基于表单上传的一些代码:

iframe.setAttribute('src', 'javascript:false;');
我使用上面的代码来取消与放置在iframe中的输入元素相关联的正在进行的上载

我正在使用下面的代码取消通过XHR发送的正在进行的上载:

myxhr.abort();
在这两种情况下,不再向servlet发送更多字节。我正在努力解决的部分是servlet方面。目前,我无法找到让servlet实例确定用户是否已取消上载的方法。这是至关重要的,否则servlet将继续处理部分上载的文件,就好像它是有效的一样


我如何通过HttpServletRequest确定用户是否已取消上载?

我不知道您如何判断,仅仅因为请求流已结束,它是否已完成或取消。必须有一个单独的HTTP请求来指示取消,该请求必须包括一些与上载相关联的令牌或ID,因为HTTP是无状态且幂等的。

带有数据的POST请求包含
内容长度
头,它告诉您将要上载的数据的大小


因此,当数据停止进入服务器并且接收到的数据大小小于预期值时,这意味着用户(或某些网络故障)已取消上载。

如果已取消上载,浏览器将关闭连接,导致servlet端出现IO异常。例如,在Tomcat中,它会说“由对等方重置连接”,这是一个ClientBortException。其他服务器以不同的方式包装IOException。关键是捕获IOException,您应该能够按照自己的意愿处理它

使用内容长度是不可靠的,因为HTTP规范不需要POST或GET的内容长度头。关键是,除非您确定javascript XHR显式设置了头,否则此方法将无法工作


或者,您可以自己计算并将其设置为确定,或者更好地将您自己的字符流附加到XHR中发布的数据的末尾,一些独特的字符串,例如。“jh923k49sk$2#%”。在servlet中,剪掉入站消息的最后14个字符,并对照字符串进行检查。如果是一样的话,你就知道他们没有取消。

我早就知道了。谢谢你的回答-看起来这正是我需要的。我发现IOException似乎没有可靠地发生。在Jetty上,在这种情况下,我似乎总是遇到EOFEException,但在Tomcat上却没有。在我的例子中,似乎为每个请求设置了内容长度,因此这可能是我处理此问题的最佳方式。我喜欢你的其他建议,尽管它在通过输入元素提交时不可用;只需使用唯一字符串创建一个隐藏的表单字段,并将其作为表单中的最后一个元素。我尝试过的每个浏览器(请注意,只是我尝试过的那些浏览器,所以有些可能不会)似乎都会按照表单字段在HTML中的顺序对文章中的表单字段进行排序。