Кажется, что сервлет обрабатывает несколько одновременных запросов браузера синхронно
Насколько я знаю, Java Servlets обрабатывает несколько запросов одновременно, и я просматривал 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
Ваш браузер, по-видимому, использует одно и то же HTTP-соединение в разных окнах. Контейнер сервлета использует один поток для HTTP-соединения, а не HTTP-запрос. Вы должны запустить два физически разных веб-браузера, чтобы проверить это правильно. Например. один Firefox и один Chrome.