【问题标题】: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】:
如果您不构建功能来实现特定于您的应用程序,就无法做到这一点。
我假设客户端点击链接会启动繁重的处理?
如果是这样,那么您可以尝试以下方法。
- 用户点击链接会启动繁重的处理。
- 服务器返回在上述相同请求中启动的进程的唯一 ID。
- 创建一个单独的界面,您可以在其中通过 id 查询特定进程的进度。
- 使用 javascript 每 1 秒查询一次界面,以了解该过程已经完成了多长时间
- 向用户显示进度条(可能用进度条替换原始链接)
- 当进程处于 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 请求进度。