IllegalStateException:AsyncContext.startAsync(req,res)不支持

我创建了一个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提到了exception,但我明确地启用了异步(cf WebServlet注释)。 我正在使用随NetBeans提供的Tomcat 7.0.11.0。

我可以确认req.isAsyncSupported()返回false。 我究竟做错了什么? 我还需要做什么来启用异步处理?

编辑:

我试图实现以下示例并得到相同的问题。

我检查了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); 

希望能帮助到你。

请检查您是否有任何未启用支持异步的请求filter。 您可以删除filter(暂时)或将其标记为支持异步。