您的位置:首页 > Web前端 > JavaScript

jspSmartUpload下载文件,出现getOutputStream() has already been called for this response 错误

2013-05-27 12:30 495 查看
关于这个错误,网上有很多种说法, 其中下面的说法:

执行下载的页面,在Java脚本范围外(即<% ... %>之外),不要包含HTML代码、空格、回车或换行等字符,有的话将不能正确下载。不信的话,可以在上述源码中%><%之间加入一个换行符,再下载一下,保证出错。因为它影响了返回给浏览器的数据流,导致解析出错。

很多人都认可。正确与否,试试便知。

测试环境:tomcat5.5.23和6.0.10

<%@ page contentType="text/html;charset=gb2312"

import="com.jspsmart.upload.*" %>

//这里有空格/回车/换行

<%

// 新建一个SmartUpload对象

SmartUpload su = new SmartUpload();

// 初始化

su.initialize(pageContext);

// 设定contentDisposition为null以禁止浏览器自动打开文件,

//保证点击链接后是下载文件。若不设定,则下载的文件扩展名为

//doc时,浏览器将自动用word打开它。扩展名为pdf时,

//浏览器将用acrobat打开。

su.setContentDisposition(null);

// 下载文件

String file = request.getParameter("file");

su.downloadFile(file);

//解决 java.lang.IllegalStateException:

//getOutputStream() has already been called for this response

//这个问题

out.clear();

out=pageContext.pushBody();

%>

下载成功,没有出错。

下面是某位仁兄的解决办法:
由于jsp container在处理完成请求后会调用releasePageContet方法释放所用的PageContext object,并且同时调用getWriter方法,由于getWriter方法与在jsp页面中使用流相关的getOutputStream方法冲突,所以会造成这种异常,解决办法是:只需要在jsp页面的最后加上两条语句: out.clear();out=pageContext.pushBody();即可(其中out,pageContext均为jsp内置对象!)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐