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. Что я делаю не так? Что еще нужно сделать, чтобы включить асинхронную обработку?
Редактировать:
Я попытался реализовать следующий пример и получил тот же вопрос.
2 ответа:
Я проверил код 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);
Надеюсь, что это помогает.