Java IllegalStateException:在AsyncContext.startAsync(req,res)上不受支持
我创建了servlet 3.0来探索异步请求处理:Java IllegalStateException:在AsyncContext.startAsync(req,res)上不受支持,java,asynchronous,process,request,servlet-3.0,Java,Asynchronous,Process,Request,Servlet 3.0,我创建了servlet 3.0来探索异步请求处理: @WebServlet(name="MyTest", urlPatterns={"/MyTest"}, asyncSupported=true) public class MyTest extends HttpServlet { @Override public void doGet(HttpServletRequest req, HttpServletResponse res) throws Serv
@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(…)
时,我得到了一个非法状态异常。我知道Javadoc提到了这个异常,但我确实明确启用了异步(c.f.WebServlet
annotation)。我正在使用随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);
或
希望有帮助。请检查您是否有任何未启用以支持异步的请求筛选器。您可以删除筛选器(临时)或将其标记为支持异步 我现在重新安装了NetBeans 7.0.1,它是Tomcat 7.0.14附带的,但我仍然有相同的问题。请求的类型不是org.apache.catalina.connector.request,而是将ASYNC_SUPPORTED设置为true works!!!示例(如果在web.xml中定义过滤器);真的
((org.apache.catalina.connector.Request)req).setAsyncSupported(true);