1

本番環境で ToolTwist アプリケーションを実行すると、これらのエラーが発生します。これは頻繁に起こるようです。これらのスタック トレースにつながる可能性のあるコード エラーは何ですか?

2012-02-13 11:00:04,242 ERROR ServletUiModule - Error in Servlet tooltwist.ecommerce.RoutingUIM.doPost():
java.lang.IllegalStateException: Cannot forward after response has been committed
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:312)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
4

1 に答える 1

1

ANSWER
HttpServlet には、出力ストリームを取得するための 2 つのバリエーションがあります。response.getWriter() と response.getOutputStream() です。この場合、uh.getResponse() を使用して応答オブジェクトを取得します。

いくつかのルール -

   1. これらのアプローチのいずれかを使用できます。

   2. 選択したメソッドを 2 回呼び出すことはできません。

   3. ライターまたは出力ストリームを取得したかどうかに関係なく、出力オブジェクトを取得すると、それを閉じると、それを再度使用したり、別のオブジェクトを取得したりすることはできません。

つまり、サーブレット出力の書き込みはワンショット操作です。オブジェクトを取得し、書き、サーブレットから戻ります。

ANSWER B
出力に書き込んでいる状況もあるかもしれませんが、例外を処理するためにエラーハンドラーが起動し、エラーページでさらに出力を作成する際に問題が発生することがあります。エラーを処理するために使用されるページには、明確に errorpage タグが必要です (タグを正確に思い出すことはできません)。

ANSWER C
サーブレットの出力に何かを書き込むと、このエラーが発生せずに別のページに進むことはできません。

于 2012-10-18T09:38:42.350 に答える