我创建了一个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);
...
}
}
但是在调用IllegalStateException
时我得到.startAsync(...)
。我知道Javadoc提到了异常,但我明确地启用了异步(c.f。WebServlet
注释)。我正在使用随NetBeans提供的Tomcat 7.0.11.0。
我可以确认req.isAsyncSupported()
返回false。我究竟做错了什么?我还需要做些什么来启用异步处理?
修改
我尝试实施以下example并遇到了同样的问题。
答案 0 :(得分:29)
我检查了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);
希望它有所帮助。
答案 1 :(得分:8)
请检查您是否有任何未启用支持异步的请求过滤器。您可以删除过滤器(暂时)或将其标记为支持异步。