繁体   English   中英

Servlet似乎可以同步处理多个并发浏览器请求

[英]Servlet seems to handle multiple concurrent browser requests synchronously

据我所知,Java Servlets正在同时处理多个请求,我已经搜索了StackOverflow和Google,并确认了我的想法。 但是我现在很困惑,我写了一个简单的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");

    }
}

然后,我有2个浏览器窗口,同时打开了我的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

我感觉好像丢失了一些东西……Servlet应该能够处理并发请求,但是似乎并没有这样做。 我在服务方法上也执行了与上述相同的操作,而不是在doGet上执行的操作相同。

有指针吗?

谢谢

您的浏览器显然在不同的窗口中使用相同的HTTP连接。 Servlet容器针对每个HTTP连接而不是针对HTTP请求使用单个线程。 您应该运行两个物理上不同的Web浏览器以进行正确测试。 例如,一个Firefox和一个Chrome。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM