小弟想在jsp中点击1个按钮下载文件,点击“下载”按钮后,成功弹出下载对话框,“打开”和“保存”都没报错,但是点击“取消”,servlet就有错误发生: “Outputstream encountered error during write”,意思是说在写文件的时候流发生错误。请问如何解决这个问题,十分感谢!!!servlet中的代码如下:public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
String fileName = "D:\\test.csv";
FileInputStream fileInputStream = new FileInputStream(fileName); 
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream); 
response.reset(); response.setContentType("text/html;"); 
response.setHeader("Content-Disposition", "attachment;filename="+fileName); 
OutputStream outputStream = response.getOutputStream(); 
byte[] b = new byte[1024]; 
int len = 0; 
while((len=bufferedInputStream.read(b)) != -1){ 
outputStream.write(b,0,len); 

outputStream.close(); 
bufferedInputStream.close(); 
fileInputStream.close(); 

解决方案 »

  1.   

    下面是错误的信息:
    com.ibm.wsspi.webcontainer.ClosedConnectionException:OutputStream encountered error during write.错误定位在: outputStream.write(b,0,len); 这一行。点击“打开”和“保存”都没问题,点击“取消”就发生这个错误。请大家指点指点!谢谢!
      

  2.   

    这种问题,套个try catch框不就好了嘛
      

  3.   

    用try catch是可以捉住错误,但错误还是发生了。我想看看有没有办法解决这个错误,例如检查 response的属性之类的办法,谢谢
      

  4.   

    com.ibm.wsspi.webcontainer.ClosedConnectionException:OutputStream encountered error during write.这个异常是说outputStream在写过程中,发生了连接关闭的异常....就是说文件都还正在下载,你就点了取消...
    所以异常是会发生的,这很正常,所以改一下while((len=bufferedInputStream.read(b)) != -1){ 
    outputStream.write(b,0,len); 
    } 判断连接是否正连接着
      

  5.   

    这个问题是无法避免的,也不会影响tomcat的运行,因为当出现对话框的时候已经在服务端运行到了outputStream.write方法了,而此时的服务端是无法控制和判断客户端的,放心了,我做过的项目遇到这样的问题一概忽略
      

  6.   

    真是因为你取消后,程序找不到输出的路径,但是你程序还在执行所以会报错,这里必须try catch捕获一下然后在catch中处理掉就行...