web容器会为每个请求分配一个线程,Servlet3.0新增了异步处理,解决多个线程不释放占据内存的问题。可以先释放容器分配给请求的线程与相关资源,减轻系统负担,原先释放了容器所分配线程的请求,其响应将被延后,可以在处理完成后再对客户端进行响应。
一、AsyncContex简介
为了支持异步处理,在ServletRequest上提供了startAsync()方法。可以通过AsyncContext的getRequest()和getResponse()方法取得请求、响应对象,此次对客户端的响应将暂缓至调用AsyncContext的complete()或dispatch()方法为止。
首先要告知此容器支持Servlet异步处理,如:1: @WebServlet(urlPatterns="/some.do", asyncSupported = true)2: public class AsyncServlet extends HttpServlet{3:4: }
例1:异步处理的例子
AsyncServlet.java1: package ServletAPI;2:3: import java.io.IOException;4: import java.util.concurrent.ExecutorService;5: import java.util.concurrent.Executors;6: import javax.servlet.AsyncContext;7: import javax.servlet.ServletException;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: /**14: * Servlet implementation class AsyncServlet15: */16: @WebServlet(name = "AsyncServlet", urlPatterns = { "/async.do" },asyncSupported=true)17: public class AsyncServlet extends HttpServlet {18: private static final long serialVersionUID = 1L;19: private ExecutorService executorSe