当前位置: 首页 > 面试题库 >

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

陈实
2023-03-14
问题内容

据我所知,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.html" target="_blank">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。



 类似资料:
  • 我试图理解我在其他文章中看到的关于同步和异步web请求的术语,因此,在下面的场景中: 客户机同步地向服务器发送请求(这意味着客户机被阻塞,直到它收到响应),服务器异步地制定响应(它为每个请求启动一个新线程,并在该线程上创建响应)。 请求本身是同步的,而请求的处理是异步的吗?

  • 我正在使用Spring Boot构建一个RESTful web服务。我的IDE是Eclipse Oxygen。 这里是我的控制器代码: 我的控制台输出是: 控制台输出显示每5秒调用一次控制器。但我每隔两秒就发送一次请求。 是否可以接受来自同一会话的并发多个请求? 谢谢!

  • 问题内容: 浏览器将下载HTML页面中指定的资源的最大并发连接数是多少?它随浏览器/浏览器/连接速度的不同而不同吗? 问题答案: 简短的答案是“每个域大约4到6个连接” 有关更多详细信息,请查看有关每个浏览器将与给定域建立多少个并行连接的概述。 结果总结如下…

  • 问题内容: 我想知道您是否有关于websocket的并发连接的任何数据?我在Node.js服务器上使用Socket.io。有多少个客户端可以连接到套接字并接收数据而无需关闭我的服务器?1000?1000.0000? 谢谢! 问题答案: 这在很大程度上取决于您的硬件配置,您在服务器端究竟在做什么/处理什么以及您的系统是否针对许多并发连接进行了优化。例如,默认情况下,在Linux计算机上,您可能首先会

  • 问题内容: 在Firefox 3中,答案是每个域6个:触发对同一个域的第7个XmlHttpRequest(在任何选项卡上)时,它将排队等待,直到其他6个完成之一。 其他主要浏览器的数量是多少? 另外,是否有方法可以绕过这些限制而无需我的用户修改其浏览器设置?例如,对jsonp请求(使用脚本标记注入而不是XmlHttpRequest对象)的数量有限制吗? 背景:我的用户可以从网页向服务器发出XmlH

  • 问题内容: 执行登录功能后,“在树中查看结果”中的响应数据显示如下: 您的浏览器似乎禁用了JavaScript。 您必须在浏览器中启用JavaScript才能使用本网站的功能。 注意:已启用Firefox中的JavaScript,并且我已使用“测试脚本记录器”来记录浏览器会话。 问题答案: 从JMeter项目主页 JMeter不是浏览器。 就Web服务和远程服务而言,JMeter看起来像一个浏览器