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:
Я попытался реализовать следующий пример и получил ту же проблему.
Ответы
Ответ 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.