java.lang.IllegalStateException: getOutputStream() has already been called for this response
publicvoidexportFile(Stringexportfilepath){BufferedInputStreambis=null;BufferedOutput...
public void exportFile(String exportfilepath){
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream fos = null;
FileInputStream fis = null;
String exportfileName = exportfilepath.substring(exportfilepath.lastIndexOf(System.getProperty("file.separator"))+1);//获取导出文件名
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition","attachment; filename="+exportfileName);
try {
fis = new FileInputStream(exportfilepath);
bis = new BufferedInputStream(fis);
fos = response.getOutputStream();
bos = new BufferedOutputStream(fos);
int bytesRead = 0;
byte[] buffer = new byte[5 * 1024];
while ((bytesRead = bis.read(buffer)) != -1) {
bos.write(buffer, 0, bytesRead);// 将文件发送到客户端
}
bos.flush();
bos.close();
bis.close();
fos.flush();
fos.close();
fis.close();
} catch (IOException e) {
response.reset();
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
if (bos != null) {
bos.close();
}
if (fis != null) {
fis.close();
}
if (bis != null) {
bis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
调用这个方法成功后跳转到jsp会报上面的异常,请高手帮忙看看什么问题?原因不用说了我已经知道了,但是不知道怎么解决,请高手指点 展开
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream fos = null;
FileInputStream fis = null;
String exportfileName = exportfilepath.substring(exportfilepath.lastIndexOf(System.getProperty("file.separator"))+1);//获取导出文件名
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition","attachment; filename="+exportfileName);
try {
fis = new FileInputStream(exportfilepath);
bis = new BufferedInputStream(fis);
fos = response.getOutputStream();
bos = new BufferedOutputStream(fos);
int bytesRead = 0;
byte[] buffer = new byte[5 * 1024];
while ((bytesRead = bis.read(buffer)) != -1) {
bos.write(buffer, 0, bytesRead);// 将文件发送到客户端
}
bos.flush();
bos.close();
bis.close();
fos.flush();
fos.close();
fis.close();
} catch (IOException e) {
response.reset();
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
if (bos != null) {
bos.close();
}
if (fis != null) {
fis.close();
}
if (bis != null) {
bis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
调用这个方法成功后跳转到jsp会报上面的异常,请高手帮忙看看什么问题?原因不用说了我已经知道了,但是不知道怎么解决,请高手指点 展开
2个回答
展开全部
ERROR [Engine] StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
从网上找了下资料,综合一下原因分析:
这是web容器生成的servlet代码中有out.write(””),这个和JSP中调用的response.getOutputStream()产生冲突.
即Servlet规范说明,不能既调用 response.getOutputStream(),又调用response.getWriter(),无论先调用哪一个,在调用第二个时候应会抛出 IllegalStateException,因为在jsp中,out变量是通过response.getWriter得到的,在程序中既用了response.getOutputStream,又用了out变量,故出现以上错误。
解决方案:
1.在程序中添加:
out.clear();
out = pageContext.pushBody();
就可以了;
2,不要在%〕〔%之间写内容包括空格和换行符
3,在页面写入图片的时候,需要flush()
OutputStream output=response.getOutputStream();
output.flush();
4,在页面确定写入<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312”>
java.lang.IllegalStateException: getOutputStream() has already been called for this response
从网上找了下资料,综合一下原因分析:
这是web容器生成的servlet代码中有out.write(””),这个和JSP中调用的response.getOutputStream()产生冲突.
即Servlet规范说明,不能既调用 response.getOutputStream(),又调用response.getWriter(),无论先调用哪一个,在调用第二个时候应会抛出 IllegalStateException,因为在jsp中,out变量是通过response.getWriter得到的,在程序中既用了response.getOutputStream,又用了out变量,故出现以上错误。
解决方案:
1.在程序中添加:
out.clear();
out = pageContext.pushBody();
就可以了;
2,不要在%〕〔%之间写内容包括空格和换行符
3,在页面写入图片的时候,需要flush()
OutputStream output=response.getOutputStream();
output.flush();
4,在页面确定写入<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312”>
追问
这个方案对我在java类中写的不实用,你说的这个方案是在jsp中添加java代码,用到response.getOutputStream()时的解决方案,有没有在java类中的解决方案,请指教
追答
这个就不知道了
展开全部
有jsp页面截图么?
追问
我在java类中使用的response.getOutputStream(),导致上面异常的原因是jsp封装最后调用了
response.getWriter(),造成冲突产生这个异常,上面是java类中使用response.getOutputStream()的方法,jsp已经默认封装好了不可能修改,我想通过改上面这个方法解决这个异常,return null;就不用说了,这个可以解决,但我最后跳转必须跳转到jsp,不可能return null;请帮忙看一下上面方法可不可以修改,先谢过了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |