首页 > 代码库 > The request associated with the AsyncContext has already completed processing

The request associated with the AsyncContext has already completed processing

Some time ago there was a problem with the servlet3.0, is in servlet in asynchronous processing data, due to time outs, dry method terminates, but the back throws, anomalies are as follows:

java.lang.IllegalStateException: The request associated with the AsyncContext has already completed processing.       at org.apache.catalina.core.AsyncContextImpl.check(AsyncContextImpl.java:521)       at org.apache.catalina.core.AsyncContextImpl.getResponse(AsyncContextImpl.java:245)  

Appeared and the reason for this is because asynchronous processing time servlet the default is 10 seconds, apparently because the data is too large, resulting in time out.

The solution is simple only in the doPost method of servlet add a sentence

asyncContext.setTimeout(900000000);

For asynchronous loading manual setting the timeout can be, all the code as follows:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        request.setCharacterEncoding("UTF-8");        response.setContentType(getServletContext().getInitParameter("content"));			//In asynchronous mode, call the business processing threads to process business        //Servlet will not be blocked, but directly to the execution        //Business processing after the completion of the response by the AsyncContext management        AsyncContext asyncContext = request.startAsync();        asyncContext.setTimeout(900000000);        ProductHandleThread productHandleThread = new ProductHandleThread(asyncContext,request.getSession());        asyncContext.start(productHandleThread);	}

  

The request associated with the AsyncContext has already completed processing