2011-09-01 59 views
1

我被告知java servlet可能異步運行。但這是否意味着對單個servlet的請求是異步處理的,或者只有對不同servlet的請求是異步的。對HttpServlet的http請求是否異步處理

基本上,我在我的項目這一個servlet的:

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

servlet中的方法是同步的,每個單獨的請求都是同步處理的。但是,容器爲各個請求使用單獨的線程,因此它們應該在不同的線程中同時執行。你爲什麼認爲這兩個調用是連續執行的? – fvu

+0

'現在,當我提出兩個同時請求時,第二個等待第一個結束。 '對於給定的代碼它不是真實的,兩者都會以不同的方式提供 –

+0

你在輸出中看到了什麼? – hvgotcodes

回答

3

通過實現每個servlet請求運行在不同的線程。所以這是一個異步的行爲。

+0

不解釋他正在經歷的行爲。 – aioobe

+0

@aioobe - 是的,但也許他很困惑,他們在現實中分開運行。我想不出任何理由。 –

+0

閱讀完本文後,我意識到瀏覽器並未以異步方式生成請求。 – comco