Servlet似乎同时处理多个并发的浏览器请求
据我所知,Java Servlets同时处理多个请求,并且通过StackOverflow和Google进行search,并确认了我的想法。 不过,我现在很困惑,我写了一个简单的servlet,似乎显示阻塞行为。
所以我有一个简单的Servlet:
public class MyServlet extends HttpServlet { private static final long serialVersionUID = 2628320200587071622L; private static final Logger logger = Logger.getLogger(MyServlet.class); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { logger.info("[doGet] Test before"); try { Thread.sleep(60000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } logger.info("[doGet] Test after"); resp.setContentType("text/plain"); resp.getWriter().write("OK"); } }
然后,我有两个浏览器窗口,我打开了同时击中我的Servlet。 结果是阻止第二个请求的第一个请求。 日志还显示:
10:49:05,088 [http-8383-Processor14] INFO MyServlet - [doGet] Test before 10:50:05,096 [http-8383-Processor14] INFO MyServlet - [doGet] Test after 10:50:05,106 [http-8383-Processor22] INFO MyServlet - [doGet] Test before 10:51:05,112 [http-8383-Processor22] INFO MyServlet - [doGet] Test after
我觉得我失去了一些东西… Servlets应该能够处理并发请求,但似乎没有这样做。 我也做了上面的服务方法,而不是doGet和它做同样的事情。
任何指针?
谢谢
您的浏览器显然是在不同的窗口中使用相同的HTTP连接。 servlet容器每个HTTP连接使用一个线程,而不是每个HTTP请求。 你应该运行两个物理上不同的浏览器来正确testing。 例如一个Firefox和一个Chrome。