2011-09-01 108 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