我正在运行在回答这个问题时给出的代码 -
Servlet-3 Async Context,如何进行异步写入?
而不是 response.getWriter().write(some_big_data);
我把那条线改为
ServletRequest req= ctx.getRequest();
response.getWriter().write(req.getContentType());
现在,请求只是超时。如何访问请求对象?
我正在运行在回答这个问题时给出的代码 -
Servlet-3 Async Context,如何进行异步写入?
而不是 response.getWriter().write(some_big_data);
我把那条线改为
ServletRequest req= ctx.getRequest();
response.getWriter().write(req.getContentType());
现在,请求只是超时。如何访问请求对象?
我假设您在startAsync()
通话后在自己的线程中使用该代码片段时遇到问题。
根据 Servlet 3.0 规范第 2.3.3.4 节,对 Request 和 Response 对象的访问不是线程安全的。事实上,根据对象生命周期的状态,请求和响应对象甚至可以被回收。
鼓励您在 startAsync() 之前从 Request 和 Response 对象中获取您需要的内容,并从您自己的线程中使用这些引用。
换句话说,你使用ctx.getRequest()
andresponse.getWriter()
应该在你之前完成startAsync()