Java servlet无法同时处理get和post请求

时间:2013-07-07 03:02:46

标签: java jsp servlets concurrency

所以我认为我的servlet可以在我的网页与服务器通信的同时(同时)通过GET和POST处理请求。可能是因为它是同一页面发出两个请求,所以只有一个线程处理这两个请求。发生的事情是我通过JQuery AJAX请求调用POST请求,并且在请求成功时它调用具有JQuery AJAX GET请求的回调javascript方法。对于成功请求的构成,我的理解可能是错误的。关于如何使其工作或为什么它不起作用的任何建议或解释将不胜感激。

1 个答案:

答案 0 :(得分:1)

我使用glassfish4,servlet-api 3测试了你的案例,我观察了以下内容:

首先,我创建了一个服务于get和post的servlet。这个servlet有5秒的线程休眠延迟

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

  private static final long serialVersionUID = 1L;
  private static Logger logger = Logger.getLogger(HelloServlet.class);

  public HelloServlet() {
    super();
    logger.debug("HelloServlet created");
  }

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    logger.debug("get start");
    try { Thread.sleep(5000); }
    catch (InterruptedException e) { e.printStackTrace(); }
    logger.debug("get finish");
    super.doGet(req, resp);
  }

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    logger.debug("post start");
    try { Thread.sleep(5000); }
    catch (InterruptedException e) { e.printStackTrace(); }
    logger.debug("post finish");
    super.doPost(req, resp);
  }

}

然后我尝试在5秒钟内调用GET和POST,这就是它的样子

INFO: 2013-07-07 14:06:06 DEBUG HelloServlet:21 - HelloServlet created
INFO: 2013-07-07 14:06:06 DEBUG HelloServlet:27 - get start
INFO: 2013-07-07 14:06:08 DEBUG HelloServlet:41 - post start
INFO: 2013-07-07 14:06:11 DEBUG HelloServlet:34 - get finish
INFO: 2013-07-07 14:06:13 DEBUG HelloServlet:48 - post finish
  • 只创建了一个HelloServlet实例,这似乎是由它共享的 所有http工作者线程
  • get和post请求都由不同的线程提供,并且get和post方法的调用不同步

所以你原来的理解似乎是正确的