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

时间:2011-10-13 04:06:37

标签: 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 ServletException, IOException {

        AsyncContext tmp = req.startAsync(req, res);
        ...

    }    

}

但是在调用IllegalStateException时我得到.startAsync(...)。我知道Javadoc提到了异常,但我明确地启用了异步(c.f。WebServlet注释)。我正在使用随NetBeans提供的Tomcat 7.0.11.0。

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

修改

我尝试实施以下example并遇到了同样的问题。

2 个答案:

答案 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)

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