IllegalStateException: Not supported on AsyncConte

2019-01-18 11:35发布

I have created a servlet 3.0 to explore asynchronous request processing:

@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);
        ...

    }    

}

but I get an IllegalStateException when .startAsync(...) is called. I know the Javadoc mentions that exception, but I did explicitly enable async (c.f. WebServlet annotation). I am using Tomcat 7.0.11.0 delivered with NetBeans.

I could confirm that req.isAsyncSupported() is returning false. What am I doing wrong? What more do I need to do to enable async processing?

EDIT:

I tried to implement the following example and got the same issue.

2条回答
我命由我不由天
2楼-- · 2019-01-18 11:56

I checked out Tomcat's code and saw that the asyncSupported variable has to be explicitly set to true. That's why you are getting req.isAsyncSupported() == false.

You could try to set the async attribute in the HttpServletRequest object to true by one of the following methods.

req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);

or

((org.apache.catalina.connector.Request)req).setAsyncSupported(true);

Hope it helps.

查看更多
等我变得足够好
3楼-- · 2019-01-18 12:09

Please check if you have any request filter which is not enabled to support async. Either you can remove the filter (temporarily) or mark it to support async.

查看更多
登录 后发表回答