Сервлет, кажется, обрабатывает несколько одновременных запросов браузера синхронно - PullRequest
22 голосов
/ 04 ноября 2011

Насколько я знаю, сервлеты Java обрабатывают несколько запросов одновременно, и я искал в StackOverflow, а также в Google, и подтвердил мои мысли.Однако сейчас я совершенно сбит с толку, я написал простые сервлеты, которые, кажется, показывают поведение блокировки.

, поэтому у меня есть простой сервлет:

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 окна браузераоткрыл в то же время, что ударил мой сервлет.В результате первый запрос блокирует второй.Журнал также показывает:

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

Я чувствую, что что-то упустил ... Предполагается, что сервлеты могут обрабатывать параллельный запрос, но, похоже, он этого не делает.Я также проделал то же самое, что и выше, с методом обслуживания вместо doGet, и он делает то же самое.

Какие-нибудь указатели?

Спасибо

1 Ответ

30 голосов
/ 04 ноября 2011

Ваш браузер использует одно и то же соединение HTTP в разных окнах. Контейнер сервлета использует один поток на соединение HTTP, а не на запрос HTTP. Вы должны запустить два физически разных веб-браузера, чтобы проверить это правильно. Например. один Firefox и один Chrome.

...