4

Web Application で Jetty Websockets を使用しています。

ログオフ jsp にリダイレクトしようとすると、このエラーが発生します

oejs.ServletHandler:/test
java.lang.IllegalStateException: Committed
        at org.eclipse.jetty.server.Response.resetBuffer(Response.java:1069)
        at javax.servlet.ServletResponseWrapper.resetBuffer(ServletResponseWrapper.java:232)
        at org.eclipse.jetty.http.gzip.GzipResponseWrapper.resetBuffer(GzipResponseWrapper.java:273)
        at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:199)
        at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:98)

これは私がリダイレクトしている方法です

RequestDispatcher rd = request.getRequestDispatcher("logoff.jsp");
    rd.forward(request, response);

このエラーは再現できませんが、いつ発生する可能性があるか教えていただけますか??

4

6 に答える 6

15

java.lang.IllegalStateException: コミット済み

例外が何を意味するかについて、より一般的な説明を提供したいと思いました。まず、Jetty は例外メッセージに恥じるべきです。開発者が実際に何を意味するのかを既に理解していない限り、開発者にはほとんど、またはまったく役に立ちません。例外は次のようになります。

java.lang.IllegalStateException: 応答ヘッダーは既に送信されています。コンテンツを送信した後に結果を返そうとしていますか?

通常、この例外は、次のように呼び出したときに発生します。

 resp.getOutputStream();  // or getWriter()

その後、リダイレクトなどを試みます。

 resp.sendRedirect("/someOtherUrl");
 // or
 return new ModelAndView("redirect:/someOtherUrl");

OutputStreamクライアントにボディ バイトを書き込むことができるWriterようになると、Jetty は応答をコミットし、HTTP200および関連するヘッダーを送信する必要があります。これにより、ボディ バイトを返し始めることができます。これが発生すると、リダイレクトを実行したり、ステータス コードやヘッダーにその他の変更を加えたりすることができなくなります。

ボディ バイトを返したら、nulla の代わりにModelAndView(...)ハンドラから返すか、単にハンドラを return に変更するのが適切ですvoid

于 2015-10-30T15:44:32.633 に答える
1

これは、レスポンスがすでにリダイレクト リクエストを処理しており、コミットされたレスポンスを変更しようとしているために発生します。

これを解決するには、次の 2 つの一般的な方法があります。

  1. 最初のリダイレクトがどこにあるかを調べ、「2 つのリダイレクト」シナリオが発生しないようにロジックを変更してみてください。
  2. 各リダイレクトの後に「リターン」を入れてください(個人的にはこの解決策をお勧めします)。
于 2012-10-26T04:18:39.610 に答える
1

私の側の理由は、間違った url:
right: http://localhost:8080
wrong:で jetty を使用していることです。http://localhost:8080/test

于 2016-05-07T15:45:36.450 に答える
0

私の場合、私の中にいくつかのリポジトリがあり、クラスの最初に@Serviceそれを , と宣言しましたRepositoryFoo repositoryFoo;

@Autowired追加したり、作成したりするのを忘れていたprivateので、問題なくコンパイルされ、実行時にこれがありましたjava.lang.IllegalStateException: Committed...理由を理解する前に時間を無駄にしました!

于 2020-03-02T12:58:25.090 に答える