如何使用JSP设置进度栏值

拉尼什·库玛(Rajnish Kumar)

我正在尝试制作一个servlet,以在线下载文件。为此,我在jsp中制作了一个进度条元素。

<progress id="p1" max="100" value="0"><span>0</span>%</progress>

和Java脚本代码来更新进度值:

function setProgress(value)
{
var progressBar = document.getElementById("p1");
progressBar.value = value;
progressBar.getElementsByTagName('span')[0].textContent = value;
}

现在,在servlet代码中更改进度:

InputStream is = ..........;
byte[] bytes = new byte[size*1024];
int read = in.read();
for(int j=0;read!=-1;j++)
{
   bytes[j] = (byte)read;
   setProgress((int)getProgressDownload(bytes.length));
   read = in.read();
}

public float getProgressDownload(int dsize)
{
    return ((float)dsize/tsize)*100;//tsize is total file's size;
}
public void setProgress(int value)
{
    try
    {
       response.getWriter().write("<script>");
       response.getWriter().write("setProgress(\"p1\","+value+");");
       response.getWriter().write("</script>");
    }
    catch(Exception e)
    {
       e.printStackTrace();
    }
}

现在的问题是,这会使HTML代码变得冗长,因为它会为每个字节打印一个脚本代码。

我应该怎么做才能防止这种情况?

感谢帮助

维拉·纳拉威德

嗨,首先,我认为您应该将进程存储在会话中。然后,使用ajax调用,您可以使用从某些servlet下方收到的响应来定期更新进度栏。添加映射,然后我只写doGet东西。此外,我还假定URL映射为此特定servlet的“ progressServlet”。下面是doGet方法

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String downloadId = "longProcess_" + request.getParameter("downloadId");
        LongProcess longProcess = (LongProcess) request.getSession().getAttribute(downloadId);
        int progress = longProcess.getProgress();

        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write(String.valueOf(progress));
    }

然后,在JS中,您可以使用setTimeout()/ setInterval()以一定的间隔调用下面给出的checkProgress方法,并在收到的进度100%完成后停止调用。您可以使用它重复触发Ajax请求,以请求进度的当前状态。

var refreshprogessbar = setInterval(checkProgress, 10000);// 10 seconds
function checkProgress() {/*pass the actual id instead of 12345*/
    $.getJSON('progressServlet?downloadId=12345', function(progress) {
        if(progress == 100){clearInterval(refreshprogessbar);}
        setProgress(progress);
    });
}

LongProcess基本上是用于跟踪正在进行的过程的类。下面是其中一种示例:

class LongProcess extends Thread {
    private int progress;
    public void run() {
        while (progress < 100) {
            try { sleep(1000); } catch (InterruptedException ignore) {}
            progress++;
        }
    }    
    public int getProgress() {
        return progress;
    }
}

我只是增加进度字段成员,但您可以使用setProgress()方法并添加逻辑以增加进度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用JSP设置进度栏值

来自分类Dev

根据输入的数据设置进度栏值?

来自分类Dev

设置动态创建的JQuery进度栏的值

来自分类Dev

如何为CSS进度栏设置动画?

来自分类Dev

如何设置最小进度搜索栏?

来自分类Dev

从代码设置搜索栏的进度值时,如何防止onProgressChanged事件触发?

来自分类Dev

从代码设置搜索栏的进度值时,如何防止onProgressChanged事件触发?

来自分类Dev

如何在UWP中设置任务栏进度栏

来自分类Dev

如何使用自定义可绘制对象设置初始评级栏进度

来自分类Dev

WPF设置新值到我的ListView进度栏列

来自分类Dev

如何使用PHP“单击”加载进度栏

来自分类Dev

如何使用C#进度栏?

来自分类Dev

进度栏值无效

来自分类Dev

Angular UI Bootstrap进度栏-如何使用表达式计算“值”属性?

来自分类Dev

如何使用文本框,进度栏和PerformanceCounters中的值进行计算?C#

来自分类Dev

如何使用jQuery将Bootstrap进度栏值重置为0

来自分类Dev

如何在范围搜索栏中设置进度间隔

来自分类Dev

查看后如何为引导进度栏设置动画?

来自分类Dev

如何在Bootstrap 3中为进度栏设置动画?

来自分类Dev

如何在Bootstrap 4中为进度栏设置动画?

来自分类Dev

如何在每个循环的进度栏中设置文本标签?

来自分类Dev

单击回收者视图时如何设置进度栏

来自分类Dev

如何使用Ognl将值设置为jsp中的valuestack?

来自分类Dev

如何使Java进度栏显示十进制值?

来自分类Dev

当进度栏值更改时,如何更改css梯度值?

来自分类Dev

HTML PHP数学:使用等级值填充进度栏

来自分类Dev

Firefox:进度栏值的样式?

来自分类Dev

如何使用Netbeans不确定的进度栏样式?

来自分类Dev

如何在主窗口之外使用ShowProgressAsync进度栏?

Related 相关文章

  1. 1

    如何使用JSP设置进度栏值

  2. 2

    根据输入的数据设置进度栏值?

  3. 3

    设置动态创建的JQuery进度栏的值

  4. 4

    如何为CSS进度栏设置动画?

  5. 5

    如何设置最小进度搜索栏?

  6. 6

    从代码设置搜索栏的进度值时,如何防止onProgressChanged事件触发?

  7. 7

    从代码设置搜索栏的进度值时,如何防止onProgressChanged事件触发?

  8. 8

    如何在UWP中设置任务栏进度栏

  9. 9

    如何使用自定义可绘制对象设置初始评级栏进度

  10. 10

    WPF设置新值到我的ListView进度栏列

  11. 11

    如何使用PHP“单击”加载进度栏

  12. 12

    如何使用C#进度栏?

  13. 13

    进度栏值无效

  14. 14

    Angular UI Bootstrap进度栏-如何使用表达式计算“值”属性?

  15. 15

    如何使用文本框,进度栏和PerformanceCounters中的值进行计算?C#

  16. 16

    如何使用jQuery将Bootstrap进度栏值重置为0

  17. 17

    如何在范围搜索栏中设置进度间隔

  18. 18

    查看后如何为引导进度栏设置动画?

  19. 19

    如何在Bootstrap 3中为进度栏设置动画?

  20. 20

    如何在Bootstrap 4中为进度栏设置动画?

  21. 21

    如何在每个循环的进度栏中设置文本标签?

  22. 22

    单击回收者视图时如何设置进度栏

  23. 23

    如何使用Ognl将值设置为jsp中的valuestack?

  24. 24

    如何使Java进度栏显示十进制值?

  25. 25

    当进度栏值更改时,如何更改css梯度值?

  26. 26

    HTML PHP数学:使用等级值填充进度栏

  27. 27

    Firefox:进度栏值的样式?

  28. 28

    如何使用Netbeans不确定的进度栏样式?

  29. 29

    如何在主窗口之外使用ShowProgressAsync进度栏?

热门标签

归档