【问题标题】:Java EE servlet to create a file and show progress while creating itJava EE servlet 创建文件并在创建时显示进度
【发布时间】:2010-12-09 17:23:42
【问题描述】:

我需要编写一个 servlet,它会向用户返回一个包含一些统计信息的 csv。 我知道如何只返回文件,但是在显示文件创建过程的进度条的同时如何做到这一点?

我无法理解如何做一些 ajaxy 来显示文件创建的进度,同时创建文件 - 如果我创建一个将返回完成百分比的 servlet,它如何保持相同它正在创建的文件,同时每隔 x 秒向浏览器返回一个响应以显示进度。

【问题讨论】:

    标签: ajax file servlets jakarta-ee


    【解决方案1】:

    有两种根本不同的方法。一种是使用诸如 Comet 之类的方法的真正异步交付。您可以在 this. 等文章中看到一些描述,我会使用这种方法,您提供的数据自然是增量的 - 例如来自仪器的实时测量。一些 Java 应用服务器在其 JMS 消息系统和 Comet 与浏览器之间进行了很好的集成。

    另一种方法是你有一个轮询机制。浏览器中的 JavaScript 会定期调用服务器以获取状态(可能还有下一个数据块)。这种方法的优点是您使用的是非常标准的编程模型,需要学习的新东西更少。对于许多情况,例如“我正在处理的 Stack Overflow 问题是否有新的答案?”这已经足够了。

    您的挑战可能是确定任何有用的进度信息。您如何知道生成 CSV 文件的进度?

    如果您从一个 servlet 发出一个长时间运行的请求,您很可能会有效地分离一个工作线程来完成这项工作。 (也许使用 JMS,也许使用异步工作者)并立即向浏览器返回一个响应,说“明白,我在想”。这可确保您不会受到 Http 响应超时的影响。那么问题是如何确定当前的进度。除非做这项工作的“工人”有某种方式来传达其部分进展,否则你无话可说。这种事情往往是非常特定于应用程序的。有些任务很自然地有进度点(考虑打印,我们知道要打印多少页和打印多少页)其他没有(考虑确定一个数字是否为素数 - 是或否,也许没有有用的中间阶段)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多