Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
238 views
in Technique[技术] by (71.8m points)

java - IllegalStateException: Not supported on AsyncContext.startAsync(req, res)

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...