Подтвердить что ты не робот

IllegalStateException: не поддерживается в AsyncContext.startAsync(req, res)

Я создал сервлет 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 упоминает это исключение, но я явно разрешил аннотацию async (c.f. WebServlet). Я использую Tomcat 7.0.11.0, поставляемый с NetBeans.

Я мог подтвердить, что req.isAsyncSupported() возвращает false. Что я делаю не так? Что еще мне нужно сделать, чтобы включить асинхронную обработку?

EDIT:

Я попытался реализовать следующий пример и получил ту же проблему.

4b9b3361

Ответ 1

Я проверил код Tomcat и увидел, что для переменной asyncSupported должно быть явно установлено значение true. Вот почему вы получаете req.isAsyncSupported() == false.

Вы можете попытаться установить для атрибута async в объекте HttpServletRequest значение true одним из следующих методов.

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

или

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

Надеюсь, что это поможет.

Ответ 2

Пожалуйста, проверьте, есть ли у вас фильтр запросов, который не включен для поддержки async. Либо вы можете удалить фильтр (временно), либо пометить его для поддержки async.