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

Jér*_*nge 13 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);
        ...

    }    

}
Run Code Online (Sandbox Code Playgroud)

但我得到的IllegalStateException时候.startAsync(...)被调用.我知道Javadoc提到了异常,但我明确地启用了异步(cf WebServletannotation).我正在使用随NetBeans提供的Tomcat 7.0.11.0.

我可以确认这req.isAsyncSupported()是假的.我究竟做错了什么?我还需要做些什么来启用异步处理?

编辑:

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

Eft*_*mis 29

我检查了Tomcat的代码,发现asyncSupported变量必须显式设置为true.这就是你得到的原因req.isAsyncSupported() == false.

您可以尝试通过以下方法之一将HttpServletRequest对象中的async属性设置为true.

req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);
Run Code Online (Sandbox Code Playgroud)

要么

((org.apache.catalina.connector.Request)req).setAsyncSupported(true);
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

  • 该请求不是org.apache.catalina.connector.Request类型,但是将ASYNC_SUPPORTED设置为true即可! (2认同)

小智 8

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