我在做一个文件上传的功能。
当点击上传后,需要时时的返回文件上传的进度。在页面上显示进度条。我现在是在js里面用ajax 调用servlet。然后用servlet调用文件上传的处理类。。这个文件上传的进度在这个类里面。我怎么能时时的返回到页面啊?js http_request = false;   
        //下面需要建立一个XMLHttpRequest对象,用它进行服务器请求,针对不同浏览器建立方法不同   
       if (window.XMLHttpRequest)   
     { // Mozilla, Safari,...   
            http_request = new XMLHttpRequest();   
           if (http_request.overrideMimeType)   
            {   
                 http_request.overrideMimeType('text/xml');   
             }   
        }   
        else if (window.ActiveXObject)   
        { // IE   
          try {   
               http_request = new ActiveXObject("Msxml2.XMLHTTP");   
           }   
          catch (e)   
          {   
                try  
              {    
               http_request = new ActiveXObject("Microsoft.XMLHTTP");   
                }   
               catch (e) {}   
          }   
        }   
         
     if (!http_request) {   
          alert('出现错误,不能建立一个XMLHTTP实例!');   
          return false;   
     }   
     //var url = "servlet/UploadServlet?filepath="+filepath;
     var url = "servlet/UploadServlet?filepath="+"F://ScreenKinescope.rar";
    
     //funccallback为请求返回后要调用的javascript方法   
     http_request.onreadystatechange = funccallback;   
     //该请求用get方式发送至url为/servlet/CheckServlet的Servlet,url可以带参数或数据方式同一般url传值,Servlet请看后面代码   
     //http_request.open('GET',url, true);   
     //http_request.send(null);   
     //如果要使用HTTP POST方式,必须要对 XMLHttpRequest 对象设置一个 Content-Type 头,使用以下语句(url中也可包含参数):   
     http_request.open('POST',url, true);   
     http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");   
     http_request.send(null);   
//每隔5秒循环一次服务器请求   
setTimeout('startProgress()',1000); 
servlet:String filepath = request.getParameter("filepath");
String filepathF ="";
if (filepath.contains("/")) {
filepathF = filepath.substring(filepath.lastIndexOf("/") + 1);
}
                          ContinueFtp c = new ContinueFtp();
c.connect("localhost", 21, "userid", "gao");
c.u(filepath, "/"+filepathF);文件上传的具体类:public UploadStatus uploadFile(String remoteFile, File localFile,
FTPClient ftpClient, long remoteSize) throws IOException {
UploadStatus status;
// 显示进度的上传
long step = localFile.length() / 100;
long process = 0;
long localreadbytes = 0L;
//InputStream raf = new FileInputStream(localFile);
RandomAccessFile raf = new RandomAccessFile(localFile, "r");
OutputStream out = ftpClient.appendFileStream(new String(remoteFile
.getBytes("GBK"), "iso-8859-1"));
// 断点续传
if (remoteSize > 0) {
ftpClient.setRestartOffset(remoteSize);
process = remoteSize / step;
raf.seek(remoteSize);
localreadbytes = remoteSize;
}
byte[] bytes = new byte[1024];
int c;
while ((c = raf.read(bytes)) != -1) {
out.write(bytes, 0, c);
localreadbytes += c;
if (localreadbytes / step != process) {
process = localreadbytes / step;
UploadServlet.a = process;
System.out.println("上传进度:" + process);
// TODO 怎么把这个process这个变量时时的传到jsp页面上啊
}
}
out.flush();
raf.close();
out.close();
boolean result = ftpClient.completePendingCommand();
if (remoteSize > 0) {
status = result ? UploadStatus.Upload_From_Break_Success
: UploadStatus.Upload_From_Break_Failed;
} else {
status = result ? UploadStatus.Upload_New_File_Success
: UploadStatus.Upload_New_File_Failed;
}
return status;
}