问题
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.
回答1:
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.
回答2:
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.
来源:https://stackoverflow.com/questions/7749350/illegalstateexception-not-supported-on-asynccontext-startasyncreq-res