我用struts action 下载文件 
当用户点击“保存”时没有问题可以正常下载, 
当用户点击“取消”时就发生异常 public ActionForward fileDownAction(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {  
System.out.println("进入执行下载的action");   //调试用
    response.setCharacterEncoding("iso-8859-1");
    response.setContentType("application/x-msdownload");
   
    String fileid = request.getParameter("id");
    String filename = request.getParameter("filename");
       String endname = filename.substring(filename.lastIndexOf("."));
    String filepath = request.getRealPath("");
    filepath += "\\FILES\\";
    byte b[] = new byte[100];
    File file = new File(filepath, filename);
    try {
    response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso-8859-1"));
    OutputStream outstream = response.getOutputStream();
   
    FileInputStream in = new FileInputStream(file);
    int n = 0;
    while ((n = in.read(b)) != -1) {
     outstream.write(b, 0, n);
    }
    in.close();   
    outstream.close();
   } catch (Exception e) {
    throw new RunTimeException("出现异常",e);
   // e.printStackTrace();
   }   
   //return mapping.findForward("fileDown");
   return null;
  
}    异常是: java.net.SocketException: Connection reset by peer: socke 
t write error 
at org.apache.coyote.tomcat5.OutputBuffer.doFlush(OutputBuffer.java:331) at org.apache.coyote.tomcat5.OutputBuffer.flush(OutputBuffer.java:297) 
at org.apache.coyote.tomcat5.CoyoteOutputStream.flush(CoyoteOutputStream.java:85) 
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:124) 
... ... 我的理解,应该是用户点击取消时,response.getOutputStream()已经关闭 
所以继续写入数据就会出错,是不是这样啊? 请教,怎么解决这个问题???  
另外一个问题:单击的时候会出现迅雷下载对话框,如果选择用迅雷下载,下载的文件名乱码和文件为空?