Servlet异步问题和错误

时间:2016-01-28 15:19:13

标签: multithreading servlets asynchronous

刚刚开始学习Servlets和JSP,我尝试根据本指南根据异步Servlet实现:https://plumbr.eu/blog/java/how-to-use-asynchronous-servlets-to-improve-performance

我对这个问题有两个问题:

  1. 我没有理解为什么异步Servlet应该更快。根据他的例子,通过服务器线程获取阻塞的瞬间,您将被应用程序线程阻塞。

  2. 我试图实现他的例子,但是当我运行异步Servlet时,我得到了恼人的HTTP Status 500错误。 The server encountered an internal error that prevented it from fulfilling this request。 我不知道为什么它不起作用,我甚至不确定如何开始调试它。

  3. P.S。我认为通过此处URL会更容易,因为它与我的代码几乎相同。但如果你们需要我也会传递代码。

1 个答案:

答案 0 :(得分:1)

Asynch Servlet(AS)并不快。它比正常的servlet路由有更多的开销。它的主要目标是改进WebContainer(WC)的线程使用。

WC的线程池中配置的线程数量有限,无法为请求提供服务。当请求花费太长时间(例如,等待数据库生成数据)以及应用程序服务器处于负载状态时,WC将停止提供任何新请求,直到其线程可用(即先前的请求已完成,从而释放一个WC的主题)。

这就是AS的用武之地。因此,AS可以在不同的线程(工作负载管理线程......)上分拆,而不是等待。这允许完成原始servlet,从而将WC的线程释放回池中,以便为下一个请求提供服务。