每个客户端的新Servlet

时间:2015-05-04 10:11:08

标签: java servlets asynchronous

@WebServlet(value = "/account", asyncSupported = true)
public class AccountServlet extends javax.servlet.http.HttpServlet {
     int i = 0;
     private final ScheduledExecutorService executor = 
     Executors.newSingleThreadScheduledExecutor();

     @Override
     protected void doGet(HttpServletRequest request, HttpServletResponse response) {
         System.out.println("i="+(++i)); 
     }

     @Override
     public void destroy() {
           executor.shutdown();
     }
}

我研究servlet的工作过程。当我在每个标签页和新浏览器中打开新标签时,我在新标签页甚至是新浏览器中增加了0 1 2等。

我认为我必须从新标签和新浏览器中的0开始。我们如何解释为什么会这样?

1 个答案:

答案 0 :(得分:0)

在Web应用程序的整个生命周期中,只创建单个Servlet对象,并为每个后续请求创建一个新线程

  

Java servlet容器/ Web服务器通常是多线程的。那   表示可以执行对同一个servlet的多个请求   同时。

这就是为什么当下次请求到来时,它不会重新初始化成员i,而是使用之前的i