【问题标题】:How can I make the progress bar work in synchronization with the server code?如何使进度条与服务器代码同步工作?
【发布时间】:2014-05-13 06:38:59
【问题描述】:

在加载jsp之前需要执行一个繁重的数据库进程。

// jsp
<% new bean().startHeavyProcess(); %>
.
.
.

随着过程的进行,我想使用java script 显示progress bar。有什么办法可以使进度条与服务器端代码同步工作?我可以知道服务器端代码何时完成执行或即将完成执行吗?

【问题讨论】:

    标签: java javascript jsp web-applications


    【解决方案1】:

    如果您不构建功能来实现特定于您的应用程序,就无法做到这一点。

    我假设客户端点击链接会启动繁重的处理?

    如果是这样,那么您可以尝试以下方法。

    1. 用户点击链接会启动繁重的处理。
    2. 服务器返回在上述相同请求中启动的进程的唯一 ID。
    3. 创建一个单独的界面,您可以在其中通过 id 查询特定进程的进度。
    4. 使用 javascript 每 1 秒查询一次界面,以了解该过程已经完成了多长时间
    5. 向用户显示进度条(可能用进度条替换原始链接)
    6. 当进程处于 100% 时,将用户重定向到新页面。

    这种方法要求你有某种重型进程管理器,它了解所有正在运行的进程,并且可以从中提取一个进程。

    这可以通过在您的数据库中创建一个新表来完成,您可以在其中存储进程唯一 ID 和每个进程的进度百分比。然后,每个进程都会随着进程的进行更新其在表中的行,您只需在其 ID 请求时从表中返回进程值。

    如果您正在寻找一个好的进度条插件 Jquery 有它:http://jqueryui.com/progressbar/ :)

    【讨论】:

      【解决方案2】:

      我通过使用

      来做到这一点
      function pollProgress() {
        setTimeout(function() {
          int progress = queryServerProgress();
          if(progress < 100) {
            pollProgress();
          }
        }, 1000)
      }
      

      并查询当前进度的服务器。只要进度

      不过,您需要跟踪服务器端的进度。

      【讨论】:

        【解决方案3】:

        我们有一个类似的用例,我们通过使用 REST API 定期检查状态来实现。当任务在服务器端进行时,服务器会更新内存中的状态,客户端会从 API 请求进度。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-21
          • 1970-01-01
          • 2016-04-19
          相关资源
          最近更新 更多