Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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/2/spring/11.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
JavaHTTPservlet重复提交_Java_Spring_Web Services_Servlets - Fatal编程技术网

JavaHTTPservlet重复提交

JavaHTTPservlet重复提交,java,spring,web-services,servlets,Java,Spring,Web Services,Servlets,我的问题是我提交了一个上传文件。服务器处理文件大约3分钟后(在将响应写入输出流之前),有东西正在重新提交文件。我不知道启动重新提交的流程是什么。我怀疑这是来自客户方面 我在服务器上的设置是一个类,它扩展了web.xml中映射的HttpServlet,doPost完成了这项工作 <servlet> <servlet-name>rest</servlet-name> <servlet-class>com.myorg.MyServlet</

我的问题是我提交了一个上传文件。服务器处理文件大约3分钟后(在将响应写入输出流之前),有东西正在重新提交文件。我不知道启动重新提交的流程是什么。我怀疑这是来自客户方面

我在服务器上的设置是一个类,它扩展了web.xml中映射的HttpServlet,doPost完成了这项工作

<servlet>
  <servlet-name>rest</servlet-name>
  <servlet-class>com.myorg.MyServlet</servlet-class>
</servlet>
有许多servlet过滤器,例如我们使用spring安全性,还有一些自定义过滤器,在传递请求之前记录请求

我真的被这个问题难住了,所以任何帮助都将不胜感激


注意这是Jetty 6.1.26的一个问题-更改为第8版解决了问题

是因为上传花费了很长时间,还是服务器在上传后处理文件

如果是服务器处理,我建议如下:

在不同的线程中处理上载的文件。这意味着servlet能够在处理仍在进行时发送响应。为了防止重新提交,servlet可以使用重定向进行响应:

response.sendRedirect("results-page-url");  //change the url to suit your app 

任何重新提交的内容都将直接转到重定向的URL。

谢谢您的建议。服务器处理需要时间。问题是回复必须包含提交的结果,这意味着在处理提交后才能编写。我不能改变这一点,因为它必须符合服务实现的ISO规范。您能否确认提交重复请求的客户是否确实是该客户?如果在浏览器中按F12键,则可以打开“开发人员工具”控制台并查看“网络”选项卡。在这里,您应该可以看到请求发出。查看开发人员工具中的网络流量可以发现只有一个请求。我在java代码中设置了一个断点来捕获第二个请求,并让第一个请求一直运行到完成。奇怪的是,第一个请求的输出并没有写回客户机,但第二个请求的输出却是。我使用Jetty在Elcipse中运行,所以这可能是一个servlet容器问题。我将尝试使用不同版本的Jetty。令人恼火的是,当我更改为8.x版本时,它是Jetty 6.1.26。谢谢你的帮助。
QueuedThreadPool$PoolThread.run line 582
response.sendRedirect("results-page-url");  //change the url to suit your app