IllegalStateException: не поддерживается в AsyncContext.startAsync (req, res) - PullRequest
13 голосов
/ 13 октября 2011

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

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

EDIT:

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

Ответы [ 2 ]

29 голосов
/ 21 октября 2011

Я проверил код 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);

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

8 голосов
/ 28 октября 2012

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

...