Java IllegalStateException:在AsyncContext.startAsync(req,res)上不受支持

Java IllegalStateException:在AsyncContext.startAsync(req,res)上不受支持,java,asynchronous,process,request,servlet-3.0,Java,Asynchronous,Process,Request,Servlet 3.0,我创建了servlet 3.0来探索异步请求处理: @WebServlet(name="MyTest", urlPatterns={"/MyTest"}, asyncSupported=true) public class MyTest extends HttpServlet { @Override public void doGet(HttpServletRequest req, HttpServletResponse res) throws Serv

我创建了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(…)
时,我得到了一个
非法状态异常。我知道Javadoc提到了这个异常,但我确实明确启用了异步(c.f.
WebServlet
annotation)。我正在使用随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);


希望有帮助。

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

我现在重新安装了NetBeans 7.0.1,它是Tomcat 7.0.14附带的,但我仍然有相同的问题。请求的类型不是org.apache.catalina.connector.request,而是将ASYNC_SUPPORTED设置为true works!!!示例(如果在web.xml中定义过滤器);真的
((org.apache.catalina.connector.Request)req).setAsyncSupported(true);