1. import java.io.IOException;
    2. import java.util.concurrent.CompletableFuture;
    3. import java.util.concurrent.TimeUnit;
    4. import javax.servlet.AsyncContext;
    5. import javax.servlet.ServletException;
    6. import javax.servlet.ServletRequest;
    7. import javax.servlet.ServletResponse;
    8. import javax.servlet.annotation.WebServlet;
    9. import javax.servlet.http.HttpServlet;
    10. import javax.servlet.http.HttpServletRequest;
    11. import javax.servlet.http.HttpServletResponse;
    12. /**
    13. * Servlet implementation class AsyncServlet
    14. */
    15. @WebServlet(asyncSupported = true, urlPatterns = { "/AsyncServlet" })
    16. public class AsyncServlet extends HttpServlet {
    17. private static final long serialVersionUID = 1L;
    18. /**
    19. * @see HttpServlet#HttpServlet()
    20. */
    21. public AsyncServlet() {
    22. super();
    23. // TODO Auto-generated constructor stub
    24. }
    25. /**
    26. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
    27. * response)
    28. */
    29. protected void doGet(HttpServletRequest request,
    30. HttpServletResponse response) throws ServletException, IOException {
    31. long t1 = System.currentTimeMillis();
    32. // 开启异步
    33. AsyncContext asyncContext = request.startAsync();
    34. // 执行业务代码
    35. CompletableFuture.runAsync(() -> doSomeThing(asyncContext,
    36. asyncContext.getRequest(), asyncContext.getResponse()));
    37. System.out.println("async use:" + (System.currentTimeMillis() - t1));
    38. }
    39. private void doSomeThing(AsyncContext asyncContext,
    40. ServletRequest servletRequest, ServletResponse servletResponse) {
    41. // 模拟耗时操作
    42. try {
    43. TimeUnit.SECONDS.sleep(5);
    44. } catch (InterruptedException e) {
    45. }
    46. //
    47. try {
    48. servletResponse.getWriter().append("done");
    49. } catch (IOException e) {
    50. e.printStackTrace();
    51. }
    52. // 业务代码处理完毕, 通知结束
    53. asyncContext.complete();
    54. }
    55. /**
    56. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
    57. * response)
    58. */
    59. protected void doPost(HttpServletRequest request,
    60. HttpServletResponse response) throws ServletException, IOException {
    61. // TODO Auto-generated method stub
    62. doGet(request, response);
    63. }
    64. }