Java 设置AJAX进度条

Java 设置AJAX进度条,java,javascript,ajax,servlets,progress-bar,Java,Javascript,Ajax,Servlets,Progress Bar,好的,我是AJAX新手。有点了解请求的生命周期,比如使用ActiveXObject之类的东西 然而,现在我面临着一个现实世界的问题。我有一个在后台运行的servlet,它执行许多任务,我想显示一个进度条,以显示流程的进展情况,并显示实际正在发生的事情 到目前为止,在服务器端,我可以计算开始之前将要发生的进程的数量,并且可以很容易地在每个进程完成后添加一个计数器来递增,因此使我能够找到希望显示的百分比 至于我应该在哪里输出从递增等过程中收集的数据,到目前为止,我不确定它在处理java类中作为2个整

好的,我是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样式表中。