长时间工作时的JSP超时

长时间工作时的JSP超时,jsp,timeout,Jsp,Timeout,我有一个JSP,它接受一个csv文件,并将csv文件中的表添加到数据库中(简化描述) 登录页是一个html页面,带有提交文件的表单。提交文件后,页面将重定向到执行该工作的JSP。JSP处理完文件后,返回如下html页面: Line 1: Added Bob to users table - Sucess! Line 2: Added Sarah to users table - Sucess! 这一直很有效,但我发现了一个问题。当我上传一个更大的csv文件到我的JSP时(比如说600行而不是2

我有一个JSP,它接受一个csv文件,并将csv文件中的表添加到数据库中(简化描述)

登录页是一个html页面,带有提交文件的表单。提交文件后,页面将重定向到执行该工作的JSP。JSP处理完文件后,返回如下html页面:

Line 1: Added Bob to users table - Sucess!
Line 2: Added Sarah to users table - Sucess!
这一直很有效,但我发现了一个问题。当我上传一个更大的csv文件到我的JSP时(比如说600行而不是200行,这应该需要10-30分钟)。JSP不返回任何内容。它将不确定地保留在登录页上。我认为这是因为某种超时。有没有一个标准的方法来处理这个问题?我认为有两种解决方案,尽管我不知道如何处理其中一种:

解决方案1 增加超时时间,以便最终显示结果。我不确定这是浏览器还是服务器超时。我怀疑是服务器,因为浏览器仍然显示:
正在等待mySite.com/execute.jsp

服务器是Tomcat

解决方案2 用户javascript(?)每秒刷新一次页面(?),以便页面随着服务器的进度不断更新。我不确定需要对服务器进行哪些更改来适应这种情况,或者这是否是一种常见做法。一个指向示例的指针会很有帮助


(我不确定此解决方案是否能解决问题,或者只是提供有关问题失败位置的更好信息)。

解决方案2更好。另一个选择是

  • 创建AJAX请求,该请求将在处理作业完成时异步更新页面
如果可以刷新整个页面,可以使用

<meta http-equiv="refresh" content="600">

在服务器端代码中,您必须确保后续刷新返回处理作业的状态;而不是处理作业的初始调用

但是,如果不想重新加载整个页面,则需要一些Ajax实现,如GWT。使用GWT编写简单的DIV更新程序非常容易。看看谷歌上的GWT教程。

我找到了几年前的一本

它解释了如何创建如下状态栏:


通常,您应该使用异步方法处理长时间运行的请求。您的日志告诉您什么?关于如何使用异步方法的任何指针?是的,客户端可以先上载CSV,然后将其存储在数据库表中,然后您告诉客户端文件已成功上载。接下来,您将执行一个异步作业来处理(例如,使用JMS或简单的调度程序)。优点是,您可以将事情解耦,并可以控制有多少作业可以并行处理文件。缺点:客户端的复杂性,因为您需要一个过程来通知客户端文件处理是否成功。。。但它的规模!如果解决方案二更好,从哪里开始最好?接受您的答案,但使用'setTimeout'(location='status.jsp',1000);”“工作?这会阻止超时发生吗?我建议的meta标记和您刚刚编写的Javascript代码;做大致相同的事情。区别在于javascript代码可以指定任何页面(不仅仅是当前页面)作为超时时要加载的页面。