gpt4 book ai didi

Java HTTP Servlet 重复提交

转载 作者:行者123 更新时间:2023-11-29 08:55:28 25 4
gpt4 key购买 nike

我的问题是我提交了一个文件以供上传。服务器处理文件大约 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 security,还有一些自定义过滤器在传递请求之前记录请求。

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

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

最佳答案

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

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

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

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

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

关于Java HTTP Servlet 重复提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20492303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com