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);
        ...

    }    

}

但我得到一个什么时候被叫。我知道Javadoc提到了这个异常,但我确实显式启用了异步(c.f. 注释)。我使用的是与 NetBeans 一起提供的 Tomcat 7.0.11.0。IllegalStateException.startAsync(...)WebServlet

我可以确认返回 false。我做错了什么?还需要执行哪些操作才能启用异步处理?req.isAsyncSupported()

编辑:

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


答案 1

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

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

req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);

((org.apache.catalina.connector.Request)req).setAsyncSupported(true);

希望它有帮助。


答案 2

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


推荐