Java HTTP Servlet重复提交

时间:2013-12-10 10:44:07

标签: java spring web-services servlets

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

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

<servlet>
  <servlet-name>rest</servlet-name>
  <servlet-class>com.myorg.MyServlet</servlet-class>
</servlet>

在客户端上有一个带提交按钮的简单表单。

<form method='post' enctype='multipart/form-data' action='/MyJavaApplication/ws/rest'>
  <input name='uploadFile' type='file' size='45'/>
  <input name='submit' type='submit' value='Upload Document'/>
</form>

当我在初始和重复提交中查看堆栈跟踪时,我看到完全相同的入口点:

QueuedThreadPool$PoolThread.run line 582

有许多servlet过滤器,例如我们使用spring安全性,还有一些自定义过滤器,在传递请求之前记录它。

我真的很难过这个问题,所以任何帮助都会受到赞赏。

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

1 个答案:

答案 0 :(得分:0)

是上传需要很长时间,还是服务器在上传后处理文件?

如果是服务器处理,我建议这样做:

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

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

然后,任何重新提交都将直接转到重定向的网址。