package org.example.spr14669; import java.io.IOException; import javax.servlet.AsyncContext; import javax.servlet.AsyncEvent; import javax.servlet.AsyncListener; import javax.servlet.DispatcherType; import javax.servlet.ServletException; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @WebServlet(urlPatterns = "/test", asyncSupported = true) public class TestServlet extends HttpServlet { private static Logger logger = LoggerFactory.getLogger(TestServlet.class); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if (!DispatcherType.REQUEST.equals(req.getDispatcherType())) { logger.info("Unexpected DispatcherType: " + req.getDispatcherType()); return; } AsyncContext asyncContext = req.startAsync(req, resp); asyncContext.setTimeout(5000); asyncContext.addListener(new AsyncListener() { public void onTimeout(AsyncEvent event) throws IOException { logger.info("Timeout event"); ServletResponse response = event.getAsyncContext().getResponse(); if (!response.isCommitted()) { ((HttpServletResponse) response).setStatus(503); } // event.getAsyncContext().complete(); } public void onError(AsyncEvent event) throws IOException { } public void onStartAsync(AsyncEvent event) throws IOException { } public void onComplete(AsyncEvent event) throws IOException { } }); } }