【发布时间】:2016-09-01 14:33:27
【问题描述】:
这里的场景:我正在使用 Struts2 在应用程序上开发新功能,并添加了一个新操作来生成 CSV 文件。在我使用 Tomcat 的测试系统上一切正常,但在使用 Websphere 服务器的 Quality 系统上,文件没问题,但最后,有一个额外的行,包括
Error 500: java.lang.IllegalStateException: Response already committed.
所以问题是,文件生成了,一切都很完美,但是 Tomcat 没有附加错误,Websphere 附加错误。
那么我该如何避免这种情况呢? 这里是主要过程(重要的行):
1- 该操作扩展了一个 org.apache.struts2.s1.Struts1Action 进行转发:
ActionForward forward = action.execute(mapping, actionForm, request, response);
2- 执行操作中的方法,并使用以下行生成响应:
response.setContentType("text/csv");
response.setHeader("Content-Disposition", "attachment; filename=\"report_"
+ Calendar.getInstance().get(Calendar.YEAR) + ".csv\"");
OutputStream outputStream = response.getOutputStream();
outputStream.write(result.toString().getBytes());
outputStream.flush();
outputStream.close();
3- 父操作完成操作。在某些时候,我得到了这个异常,但它从来没有让我们担心(我们已经生成了其他类型的 excel 报告(xls),但是从来没有遇到过 websphere 将错误附加到响应中的问题):
java.lang.IllegalStateException:getOutputStream() has already been called for this response
所以真正让我感到奇怪的是如何避免 websphere 将错误附加到 csv 文件中......但当然解决方案应该是避免错误,但问题是这个应用程序已经运行了 10 年,而我不应更改已经起作用的东西,但是欢迎对此错误的任何解决方案!
非常感谢你们!!
---编辑---
我真正想知道的是,我怎样才能使用文本文件生成响应,并且之后仍然能够进行所有转发和其他操作。
有什么想法吗?
【问题讨论】:
标签: tomcat servlets struts2 websphere