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); ... } }
但是当.startAsync(...)
时,我得到一个IllegalStateException
。 我知道Javadoc提到了exception,但我明确地启用了异步(cf WebServlet
注释)。 我正在使用随NetBeans提供的Tomcat 7.0.11.0。
我可以确认req.isAsyncSupported()
返回false。 我究竟做错了什么? 我还需要做什么来启用异步处理?
编辑:
我试图实现以下示例并得到相同的问题。
我检查了Tomcat的代码,发现asyncSupported变量必须显式设置为true。 这就是你得到req.isAsyncSupported() == false
。
您可以尝试通过以下方法之一将HttpServletRequest对象中的async属性设置为true。
req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);
要么
((org.apache.catalina.connector.Request)req).setAsyncSupported(true);
希望能帮助到你。
请检查您是否有任何未启用支持异步的请求filter。 您可以删除filter(暂时)或将其标记为支持异步。