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

我在服务器上的设置是一个类,该类使用doPost来完成web.xml中映射的HttpServlet的扩展。

<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可解决此问题

最佳答案

是上载时间较长还是上载后服务器处理文件?

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

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

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


任何重新提交的内容将直接进入重定向的URL。

10-06 02:00