我创建了一个 servlet 3.0 来探索异步请求处理:
@WebServlet(name="MyTest", urlPatterns={"/MyTest"}, asyncSupported=true)
public class MyTest extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
AsyncContext tmp = req.startAsync(req, res);
...
}
}
但是当调用 .startAsync(...)
时,我得到一个 IllegalStateException
。我知道 Javadoc 提到了该异常,但我确实明确启用了异步(参见 WebServlet
注释)。我使用的是随 NetBeans 一起提供的 Tomcat 7.0.11.0。
我可以确认 req.isAsyncSupported()
正在返回 false。我究竟做错了什么?我还需要做什么才能启用异步处理?
编辑:
我尝试实现以下 example并得到了同样的问题。
最佳答案
我检查了 Tomcat 的代码,发现 asyncSupported 变量必须明确设置为 true。这就是您得到 req.isAsyncSupported() == false
的原因。
您可以尝试通过以下方法之一将 HttpServletRequest 对象中的 async 属性设置为 true。
req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);
或
((org.apache.catalina.connector.Request)req).setAsyncSupported(true);
希望对您有所帮助。
关于java - IllegalStateException : Not supported on AsyncContext. startAsync(请求,资源),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7749350/