我碰到一个struts1.2的诡异问题,高手请进来看看

huilang55 2006-02-17 11:23:08
我写了一个输出数据的excel表的程序,执行时应该先执行wb.write(fileOut);然后执行return语句,现在的现象是执行完write之后并没提示保存文件,而是跑去执行return,然后才让我保存文件。。。。


下面为action代码
try {
String SQLStatement =
"select * from t_sap_customer where customer_id = '300314'";
httpServletResponse.reset();
httpServletResponse.setContentType("application/txt; charset=GB2312");
httpServletResponse.setHeader("Content-disposition",
"attachment; filename=customer.xls");
ToExcelHelper excelHelper = new ToExcelHelper();
HSSFWorkbook wb = excelHelper.TransSalaryToExcel(SQLStatement);
ServletOutputStream fileOut = httpServletResponse.getOutputStream();
wb.write(fileOut);

}
catch (Exception e) {
e.printStackTrace();
}


return actionMapping.findForward("Success");

帮帮忙呀
...全文
208 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
huilang55 2006-02-17
呜呜
回复
huilang55 2006-02-17
shine333(enihs),谢谢,不过用httpServletResponse.isCommitted()不是可以处理这个错误么

return null这个问题说得好,struts的Action类默认都是return null
回复
shine333 2006-02-17
补充一点
对response直接进行输出的action最后应当是return null,这样,RequestProcessor就不会forward到其他资源,导致response has been committed之类的错误
回复
huilang55 2006-02-17
google了一下,发现如果设置buffersize=0的时候也会导致数据直接返回客户端,可是我以前也没有设置buffersize居然也直接返回客户端了
回复
huilang55 2006-02-17
回复人: infowain(infowain) ( ) 信誉:100 2006-02-17 15:27:00 得分: 0


servletOutputstream被释放的时候


---
close或者flush时?为什么以前我不执行flush()也可以直接将数据返回客户端呢
回复
infowain 2006-02-17
servletOutputstream被释放的时候
回复
huilang55 2006-02-17
非常感谢各位的帮助,什么时候servletOutputstream会把数据放到缓冲区,而什么时候直接返回客户端捏:)
回复
zhmain 2006-02-17
还是应该加上flush()
回复
huilang55 2006-02-17
怎么以前我在1。1下面写的就没问题,不加fileOut.flush(),代码仍然先输出,然后return。
哪里控制httpServletResponse输出是否存入缓存?
回复
wh666 2006-02-17
欢迎你访问ItFuture软件实战就业教育中心! 联系电话:029-68858748 68835355 13109530074 88271665

您想在激烈的就业竞争中脱颖而出吗?
您想在业余时间获得一技之长吗?
你想有“谁聘我,年薪10万”的豪迈吗?
您想拥有突出的软件技能服务于国内外一流软件公司吗?
  我们拥有一流常年在一线实战的资深软件工程师,他们实现了年薪10万的目标,向“年薪20万”人生迈进,他们会把远远超过同龄人的学习方法、成功理念通过言传教授予您,提高您的人生的质量,实现您的理想将不在是梦!
  来吧,我们手把手教您技术、项目开发经验和成功的方法!
  您的成功是我们的目标,您的辉煌是我们追求,您的事业是我们的骄傲!
http://www.itfuture.org
回复
polarman 2006-02-17
试一下在wb.write(fileOut);之后加这一句
fileOut.flush();
回复
polarman 2006-02-17
这是因为并不是你调用ServletOutputStream对象的输出方法后,就立即输出到客户端,而是暂存到缓冲区里,异步的。
回复
honbo 2006-02-17
在 wb.write(fileOut);
后,
先让 fileOut 输出。
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2006-02-17 11:23
社区公告
暂无公告