我写了个简单的下载Servlet,代码如下,但点击下载附件链接时弹出下载窗口,点击下载则报错,错误如题,可这并不影响正常下载,请问为何?
package net.servlet;import java.io.FileInputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import net.object.*;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class GetFile extends HttpServlet { public GetFile() {
super();
} public void destroy() {
super.destroy(); // Just puts "destroy" string in log
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
                   String attachid=request.getParameter("attach");//获取附件编号
   String realPath=request.getRealPath("/");
   String filePath=getServletContext().getInitParameter("filePath");
   FileInputStream in=null;
   ServletOutputStream output = null; 
   int id=Integer.valueOf(attachid);
   MessageDAO messagedao=new MessageDAO();
   Message message=new Message();
   message=messagedao.findById(id);
   String attachname=message.getMessageAttach();//获取附件名称
   String u_name =realPath+ filePath+"\\"+ attachname ;    
  
   try
   {
   response.reset();
   response.setContentType("application/x-msdownload");
   response.setHeader("Content-disposition", "attachment; filename=" + toUtf8String(attachname));
    in = new  FileInputStream(u_name); 
    output=response.getOutputStream();
   output.flush();
   int aRead = 0;
   while((aRead = in.read()) != -1 & in != null)
        {
          output.write(aRead);
         }
           output.flush();
   }
   catch(Exception e)
    {
    e.printStackTrace();
    }
    finally
     {
      in.close();
      output.close();       
     }
} public void init() throws ServletException {
// Put your code here
}
public static String toUtf8String(String s) {
        StringBuffer sb = new StringBuffer();
        for (int i=0;i<s.length();i++) {
            char c = s.charAt(i);
            if (c >= 0 && c <= 255) {
                sb.append(c);
            } else {
                byte[] b;
                try {
                    b = Character.toString(c).getBytes("utf-8");
                } catch (Exception ex) {
                    System.out.println(ex);
                    b = new byte[0];
                }
                for (int j = 0; j < b.length; j++) {
                    int k = b[j];
                    if (k < 0) k += 256;
                    sb.append("%" + Integer.toHexString(k).
                    toUpperCase());
                }
            }
        }
        return sb.toString();
   }
}