Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servlet可以';不能同时处理get和post请求_Java_Jsp_Servlets_Concurrency - Fatal编程技术网

Java servlet可以';不能同时处理get和post请求

Java servlet可以';不能同时处理get和post请求,java,jsp,servlets,concurrency,Java,Jsp,Servlets,Concurrency,因此,我认为我制作的servlet可以在我的网页与服务器通信的同时(同时)通过GET和POST处理请求。可能是因为发出两个请求的是同一个页面,所以只有一个线程处理两个请求。所发生的事情是,我有一个POST请求通过jQueryAjax请求被调用,请求成功后,它调用一个回调javascript方法,该方法有一个jQueryAjax请求。我对成功请求的理解可能是错误的。任何关于我如何让它工作或为什么它不工作的建议或解释都将不胜感激 我使用glassfish4、servlet api 3测试了您的案例,

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

我使用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方法的调用不同步

因此,您最初的理解似乎是正确的

您是如何确认请求没有同时得到处理的?无论如何,您所观察到的任何“同步”效果都是模拟的:除了在多核机器上,所有线程都是循环处理的(平台间略有变化)我会在输入和离开get/post处理程序时添加日志记录,并在输入和离开处理程序之间添加一些人工睡眠,以确认实际情况是否如此。@kolossus我不需要它们必须同时进行,但我的post方法似乎会阻塞,直到它完成为止。我将尝试为我的问题添加更多的上下文,以使问题更清楚。您的doGet()和doPost()方法是否相互同步。@CodeFander您的问题在这里仍然有点模糊,伙计。如果你先请求帖子,然后请求GET,那么只有在GET no之前完成帖子才公平?