Java 设置AJAX进度条
好的,我是AJAX新手。有点了解请求的生命周期,比如使用ActiveXObject之类的东西 然而,现在我面临着一个现实世界的问题。我有一个在后台运行的servlet,它执行许多任务,我想显示一个进度条,以显示流程的进展情况,并显示实际正在发生的事情 到目前为止,在服务器端,我可以计算开始之前将要发生的进程的数量,并且可以很容易地在每个进程完成后添加一个计数器来递增,因此使我能够找到希望显示的百分比 至于我应该在哪里输出从递增等过程中收集的数据,到目前为止,我不确定它在处理java类中作为2个整数处于休眠状态 任何帮助都将不胜感激 到目前为止,我已经看了一眼,我想这就是我的目标Java 设置AJAX进度条,java,javascript,ajax,servlets,progress-bar,Java,Javascript,Ajax,Servlets,Progress Bar,好的,我是AJAX新手。有点了解请求的生命周期,比如使用ActiveXObject之类的东西 然而,现在我面临着一个现实世界的问题。我有一个在后台运行的servlet,它执行许多任务,我想显示一个进度条,以显示流程的进展情况,并显示实际正在发生的事情 到目前为止,在服务器端,我可以计算开始之前将要发生的进程的数量,并且可以很容易地在每个进程完成后添加一个计数器来递增,因此使我能够找到希望显示的百分比 至于我应该在哪里输出从递增等过程中收集的数据,到目前为止,我不确定它在处理java类中作为2个整
干杯。基本上,您希望在HTTP会话中(如果涉及应用程序范围内的任务,则在Servlet上下文中)存储对任务的引用及其进度。这样,您必须能够在每个HTTP请求中检索有关它的信息 在JavaScript中,您可以使用
setTimeout()
或setInterval()
在特定超时后或在特定间隔执行函数。您可以使用它来反复激发Ajax请求,以请求当前的进度状态。一旦检索到状态,例如,在最大值为100(百分比)的整数中,只需更新表示progressbar的一些div和/或HTML DOM树中相应的百分比文本
在触发ajaxical请求和像这样遍历/操作HTMLDOM树方面非常有用。它最大限度地减少了代码冗长和交叉浏览器兼容性问题
设想servlet的doGet()
如下所示:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String processId = "longProcess_" + request.getParameter("processId");
LongProcess longProcess = (LongProcess) request.getSession().getAttribute(processId);
int progress = longProcess.getProgress();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(String.valueOf(progress));
}
然后您可以按如下方式使用它:
function checkProgress() {
$.getJSON('progressServlet?processId=someid', function(progress) {
$('#progress').text(progress + "%");
$('#progress .bar').width(progress);
if (parseInt(progress) < 100) {
setTimeout(checkProgress, 1000); // Checks again after one second.
}
});
}
函数检查进度(){
$.getJSON('progressServlet?processId=someid',函数(progress){
$(“#进度”).text(进度+“%”);
$('#progress.bar')。宽度(进度);
if(parseInt(进度)<100){
setTimeout(checkProgress,1000);//一秒钟后再次检查。
}
});
}
基本上,您希望在HTTP会话中(如果涉及应用程序范围内的任务,则在Servlet上下文中)存储对该任务的引用及其进度。这样,您必须能够在每个HTTP请求中检索有关它的信息
在JavaScript中,您可以使用setTimeout()
或setInterval()
在特定超时后或在特定间隔执行函数。您可以使用它来反复激发Ajax请求,以请求当前的进度状态。一旦检索到状态,例如,在最大值为100(百分比)的整数中,只需更新表示progressbar的一些div和/或HTML DOM树中相应的百分比文本
在触发ajaxical请求和像这样遍历/操作HTMLDOM树方面非常有用。它最大限度地减少了代码冗长和交叉浏览器兼容性问题
设想servlet的doGet()
如下所示:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String processId = "longProcess_" + request.getParameter("processId");
LongProcess longProcess = (LongProcess) request.getSession().getAttribute(processId);
int progress = longProcess.getProgress();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(String.valueOf(progress));
}
然后您可以按如下方式使用它:
function checkProgress() {
$.getJSON('progressServlet?processId=someid', function(progress) {
$('#progress').text(progress + "%");
$('#progress .bar').width(progress);
if (parseInt(progress) < 100) {
setTimeout(checkProgress, 1000); // Checks again after one second.
}
});
}
函数检查进度(){
$.getJSON('progressServlet?processId=someid',函数(progress){
$(“#进度”).text(进度+“%”);
$('#progress.bar')。宽度(进度);
if(parseInt(进度)<100){
setTimeout(checkProgress,1000);//一秒钟后再次检查。
}
});
}
太棒了!我会试一试,看看我能想出什么。好吧,很抱歉,它不在servlet中,而是在一个单独的java类中。然而,我们有一个请求类,它支持来自tomcat的请求,tomcat通常会提取一些XML并将其发送到XSL样式表中。只需创建一个servlet,以通常的java方式导入/使用该java类。太棒了!我会试一试,看看我能想出什么。好吧,很抱歉,它不在servlet中,而是在一个单独的java类中。然而,我们有一个请求类,它支持来自tomcat的请求,tomcat通常会提取一些XML并将其发送到XSL样式表中。