把代码改成下面的试试,其他的html代码都不要写
<%@ import="java.io.*" %>
<% //获得响应客户的输出流:
    OutputStream o=response.getOutputStream();
   //输出文件用的字节数组,每次发送500个字节到输出流:
   byte b[]=new byte[500];
   //下载的文件:
    File fileLoad=new File("f:/2000","book.zip");//硬盘中这个路径不存在,
                                                 //下载对话框倒是能弹出
                                                 // 如果改成硬盘中实际存
                                                 // 在的路径,程序反而要报错
   //客户使用保存文件的对话框:
   response.setHeader("Content-disposition","attachment;filename="+"book.zip"); 
   //通知客户文件的MIME类型:
    response.setContentType("application/zip");
   //通知客户文件的长度:
    long fileLength=fileLoad.length();
    String length=String.valueOf(fileLength);
    response.setHeader("Content_Length",length);
   //读取文件book.zip,并发送给客户下载:
   FileInputStream in=new FileInputStream(fileLoad);
   int n=0;
   while((n=in.read(b))!=-1)
      { o.write(b,0,n);
      }
  o.flush();
  o.close();
%>

解决方案 »

  1.   

    楼主要从原理上思考问题
    <%@ page contentType="text/html; charset=gb2312" 
    这句话是什么意思,要弄弄清楚
      

  2.   

    改成这样就可以用了,试试看,我这可以用<%@ page import="java.io.*" %>
    <% //获得响应客户的输出流:
        OutputStream o=response.getOutputStream();
       //输出文件用的字节数组,每次发送500个字节到输出流:
       byte b[]=new byte[500];
       //下载的文件:
        File fileLoad=new File("D:\\","nvidia_56.72_winxp2k_international_whql.exe");
       //客户使用保存文件的对话框:
       response.setHeader("Content-disposition","attachment;filename="+"nvidia_56.72_winxp2k_international_whql.exe"); 
       //通知客户文件的MIME类型:
        response.setContentType("application/zip");
       //通知客户文件的长度:
        long fileLength=fileLoad.length();
        String length=String.valueOf(fileLength);
        response.setHeader("Content_Length",length);
       //读取文件book.zip,并发送给客户下载:
       FileInputStream in=new FileInputStream(fileLoad);
       int n=0;
       while((n=in.read(b))!=-1)
          { o.write(b,0,n);
          }
      o.flush();
      o.close();
    %>