ここでは、Struts2を使用してアプリケーションの新しい機能を開発しています。新しいアクションを追加してCSVファイルを生成しました。すべてはTomcatで私のテスト・システム上で正常に動作しますが、WebSphereサーバーと品質システムに、ファイルはOKですが、最後に、そうなものは、ファイルが生成されレスポンスにWebsphere appendingエラーが発生しました
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次の行で応答を生成します。ある時点で、私はこの例外を取得するが、それは(私たちはすでにエクセルレポート(XLS)の他の種類を生成しますが、応答にエラーを追加のWebSphereでこの問題をやったことがなかった)私たちを心配したことがない:
java.lang.IllegalStateException:getOutputStream() has already been called for this response
ですから、本当に私に不思議なのはwebsphereにcsvファイルにエラーを追加するのを避ける方法です...しかしもちろんソリューションはエラーを避けるべきですが、このアプリケーションは10年間実行されていて、すでに動作しているものを変更してください。ただし、このエラーに対する解決策は大歓迎です!!
大変ありがとうございます。
---編集---私が実際に知りたい
何を、私はテキストファイルで応答を生成し、まだすべての転送やものを行うことがその後できることができる方法です。
アイデア?ただ、あなたにいくつかのアイデアを与えるためにしようと
実際これはエラーである可能性があります。しかし、私はすでにそれをやっています。もしnullを返さなければ、うまくいきません。しかし、私が推測することは、ファイルを使って応答を正しく生成して、転送や必要なものすべてをやりなおすことができることを実現することです。私が多くのコードを投稿していないのは、それを許可されていないからです。だから、私が言うことができる「一般的なもの」を投稿しているだけです。とにかくありがとう。私はそれをもう一度見せます。 – Carloshf
@Carloshf私が実際に心配していたのは、あなたが 'ヌルを返さず、代わりに'転送 'をしないということでした。しかし、コードの残りの部分がないと、何が間違っているのかを理解することは難しいです。すぐに解決策を見つけることを願っています... – Plirkee