0

我正在运行在回答这个问题时给出的代码 -

Servlet-3 Async Context,如何进行异步写入?

而不是 response.getWriter().write(some_big_data);我把那条线改为

 ServletRequest req= ctx.getRequest();

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

现在,请求只是超时。如何访问请求对象?

4

1 回答 1

0

我假设您在startAsync()通话后在自己的线程中使用该代码片段时遇到问题。

根据 Servlet 3.0 规范第 2.3.3.4 节,对 Request 和 Response 对象的访问不是线程安全的。事实上,根据对象生命周期的状态,请求和响应对象甚至可以被回收。

鼓励您在 startAsync() 之前从 Request 和 Response 对象中获取您需要的内容,并从您自己的线程中使用这些引用。

换句话说,你使用ctx.getRequest()andresponse.getWriter()应该在你之前完成startAsync()

于 2013-04-09T03:45:54.427 回答