想做一个事件驱动的进度条, 不知道有没有机会.
现在能想到的是每几秒钟调用一个function来查一下后台的sevlet执行某任务的进度.
这样做还有一个问题----几个client同时执行一个sevlet时没办法分开.
不知道如何能实现一种机制,让后台sevlet工作有进展时通知前方的进度条来update.

解决方案 »

  1.   

    servlet把进度存在session里, 前台js用timer, interval使用ajax或者页面刷新采访getStatus.jsp采访session进度。servlet能通知前方那估计你的servlet不是将来的不用HTTP实现的servlet啦 :|
      

  2.   

    3楼思路正确
    但我采用了其他的方法实现,请看这个 http://www.java2000.net/viewthread.jsp?tid=1457
      

  3.   

    前台 Ajax 
    后台 servlet 写给方法. 前台定时调用.
      

  4.   

    Start.jsp
    <%@page contentType="text/html;charset=GBK"%>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html;charset=GB2312">
    <title>进度条</title>
    </head>
    <body>
    <jsp:useBean id="progress" scope="session" class="oa.TaskBean"/>
    <%
    new Thread(progress).start();
    %>
    <jsp:forward page="status.jsp"/>
    </body>
    </html>
    status.jsp
    <%@page contentType="text/html;charset=GBK"%>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html;charset=GB2312">
    <title>进度条</title>
    <jsp:useBean id="progress" scope="session" class="oa.TaskBean"/>
    <%
    if(!progress.isComplete()){
    %>
    <script language="JavaScript">
    <!--
    function refresh(){
    document.location="status.jsp";
    }
    setTimeout("refresh()",1000);
    -->
    </script>
    <%}%>
    </head>
    <body>
    <%
    int percent=progress.getPercent();
    %>
    <table>
    <div align=center><%=percent%>%
    <tr>
    <% for(int i=1;i<=percent;i+=1)
    {%>
    <td width=10% bgcolor="#000080">&nbsp;</td>
    <%
    }%>
    <% for(int i=percent;i<100;i+=1)
    {%>
    <td width=10%>&nbsp;</td>
    <%}%>
    </tr>
    <div>
    </table>
    <%
    if(progress.isComplete())
    out.print("<br><font color=\"red\">任务完成</font>");
    %>
    </body>
    </html>TaskBean.java
    package oa;
    public class TaskBean extends Thread{
    public TaskBean(){
    }
    private int percent=0;
    private boolean complete=false;
    public synchronized void run(){
    while(true){
    if(percent>=100){
    complete=true;
    return;
    }
    try{
    Thread.sleep(1000);
    }catch(Exception e){
    System.err.println("TaskBean.run()"+e.getMessage());
    }
    percent+=10;
    }
    }
    public boolean isComplete(){
    return complete;
    }
    public int getPercent(){
    return percent;
    }
    }
      

  5.   

    public int getNum(){
           return 0;
    }