0

この質問への回答で指定されたコードを実行しています-

Servlet-3 非同期コンテキスト、非同期書き込みを行う方法は?

response.getWriter().write(some_big_data);その行を次のように変更する代わり に

 ServletRequest req= ctx.getRequest();

 response.getWriter().write(req.getContentType());

今、リクエストはちょうどタイムアウトしています。リクエストオブジェクトにアクセスするにはどうすればよいですか?

4

1 に答える 1

0

呼び出し後に自分のスレッド内からそのコード スニペットを使用する際に問題が発生していると思いますstartAsync()

サーブレット 3.0 仕様のセクション 2.3.3.4 によると、Request オブジェクトと Response オブジェクトへのアクセスはスレッドセーフではありません。実際、オブジェクトのライフサイクルの状態によっては、リクエスト オブジェクトとレスポンス オブジェクトをリサイクルすることさえできます。

startAsync() を実行する前にRequest オブジェクトと Response オブジェクトから必要なものを取得し、それらの参照を独自のスレッドから使​​用することをお勧めします。

言い換えれば、ctx.getRequest()andの使用は、あなたのresponse.getWriter()前に行われるべきですstartAsync()

于 2013-04-09T03:45:54.427 に答える