2

春のポートレット mvc アプリケーションがあります。Ajax リクエストを使用してリソース URL に GET リクエストを送信し、Spring Jackson マッパー(MappingJacksonJsonView) クラスを使用して json を返す jsp があります。GET リクエストは非常に遅く、実行に数秒かかることがあります。ユースケースに気付きました。

  1. アプリケーションで AJAX 送信リンクをクリックします
  2. リクエストが完了する前にページを更新します
  3. 上記の手順を繰り返します
  4. サーバーが不正な状態例外のスローを開始するとログに記録します

    原因: java.lang.IllegalStateException: getOutputStream() は、org.apache.catalina.connector.Response.getWriter(Response.java:611) の org.apache.catalina.connector.ResponseFacade.getWriter で、この応答に対して既に呼び出されています(ResponseFacade.java:198) javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:112) で

Spring は出力リーダーとライターの作成と削除を担当しているため、不正な例外をキャッチできないため、正確な問題が発生している場所を特定するのが難しいと感じています。

任意の提案やヘルプをいただければ幸いです.Thanks.

4

1 に答える 1

1

回答 - 次のことが起こっていました。影響の少ない問題に分類できると思います。

これは、ブラウザが Socket を開いて Ajax リクエストを行うときに発生しますが、サーバーからの応答を受け取る前に、(ブラウザを閉じるか、別のページに移動することによって) 開いている Socket を終了します。その間、サーバーはリクエストを処理し、ブラウザに出力を書き戻そうとしますが、ブラウザはソケットを閉じて先に進みます。

于 2012-09-18T12:56:24.010 に答える