2011-09-01 3 views
1

Мне сказали, что сервлеты Java могут запускаться асинхронно. Но означает ли это, что запросы на один сервлет обрабатываются асинхронно или что только запросы к различным сервлетам асинхронны.Являются ли HTTP-запросы для HttpServlet обработаны асинхронно

В принципе, у меня есть один сервлет в моем проекте:

public class DummyServlet extends HttpServlet 
{ 
... 
protected void doGet(HttpServletRequest request, HttpServletResponse response) 
{ 
    response.setContentType("text/plain; charset=utf-8"); 

    PrintWriter writer = new PrintWriter(response.getOutputStream()); 

    writer.write("DummyServlet invocation"); 

    System.out.print("Invocation: " + counter); 

     Thread.sleep(5000); 

    System.out.println(" ... done."); 
    counter++; 

    writer.flush(); 
    writer.close(); 
} 

Теперь, когда я делаю два одновременных запросов, второй ждет, пока первый конец. Как можно добиться асинхронного поведения в этом сценарии?

ОБНОВЛЕНИЕ: запросы обрабатываются асинхронно, только мои запросы не генерируются асинхронно.

+3

Методы в сервлете синхронны, каждый отдельный запрос обрабатывается синхронно. Тем не менее, контейнер использует отдельные потоки для отдельных запросов, поэтому они должны выполняться одновременно в разных потоках. Как вы думаете, почему два вызова выполняются серийно? – fvu

+0

'Теперь, когда я делаю два одновременных запроса, второй ждет завершения первого. 'для данного кода его не верно, оба будут служить в разных потоках –

+0

, что именно вы видите в своем выходе? – hvgotcodes

ответ

3

Реализация каждый запрос сервлета выполняется в другом потоке. Таким образом, это асинхронное поведение.

+0

Не объясняет поведение, которое он испытывает. – aioobe

+0

@aioobe - Да, но, может быть, он в замешательстве, и они работают отдельно в действительности. Я не могу думать ни о какой причине. –

+0

После прочтения этого я понял, что браузер не генерировал запросы асинхронным способом. – comco

Смежные вопросы