天天看点

getWriter() has already been called for this response的解决办法

Servlet规范说明,不能既调用 response.getOutputStream(),又调用response.getWriter(),无论先调用哪一个,在调用第二个时候应会抛出 IllegalStateException

对于getOutputStream(),api里是这样说的:Either this method or getWriter() may be called to write the body, not both.

也就是getOutputStream()和getWriter() 只能使用一个,把代码里的response.getOutputStream()全部删之后,统一使用response.getWriter() 作为输出流,问题解决。

全部代码如下

response.setContentType( "application/octet-stream ");

response.addHeader("Content-Disposition","attachment;filename=" + "work.xls");

java.io.FileInputStream fileInputStream = null;

ServletOutputStream sos = null;

PrintWriter writer = null;

try

{

fileInputStream = new java.io.FileInputStream(file);

writer = response.getWriter();

response.getOutputStream();

int i;

while((i = fileInputStream.read()) != -1)

{

writer.write(i);

}

writer.flush();

}

catch (FileNotFoundException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

finally

{

if(sos != null)

{

try

{

sos.close();

}

catch(IOException e)

{

e.printStackTrace();

}

}

if(fileInputStream != null)

{

try

{

fileInputStream.close();

}

catch(IOException e)

{

e.printStackTrace();

}

}

if(writer != null)

{

writer.close();

}

}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yuzhongzhu/archive/2011/03/31/6290526.aspx#