我碰到一个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");

帮帮忙呀
...全文
228 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 输出。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧