如何使进度条与服务器代码同步工作?

时间:2014-05-13 06:38:59

标签: java javascript jsp web-applications

在加载jsp之前必须执行繁重的数据库进程。

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

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

3 个答案:

答案 0 :(得分:2)

如果没有您构建实现此特定应用程序的功能,则无法执行此操作。

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

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

  1. 用户点击启动繁重处理的链接。
  2. 服务器返回在上述相同请求中启动的进程的唯一ID。
  3. 创建一个单独的界面,您可以通过ID查询特定流程的进度。
  4. 每隔1秒使用javascript查询界面,以了解流程的进展情况
  5. 向用户显示进度条(可能用进度条替换原始链接)
  6. 当流程100%将用户重定向到新页面时。
  7. 这种方法要求你拥有某种重型流程管理器,它掌握所有正在运行的流程,并可以从中提取流程。

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

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

答案 1 :(得分:1)

我是通过使用

完成的
function pollProgress() {
  setTimeout(function() {
    int progress = queryServerProgress();
    if(progress < 100) {
      pollProgress();
    }
  }, 1000)
}

并查询服务器当前进度。只要进度是&lt;触发相同的查询/更新功能。 100%。

您需要在服务器端跟踪进度。

答案 2 :(得分:1)

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