Tomcat 7 で次の単純な JSP を実行しています。コンテナーには他に何もなく、web.xml もありません。ブラウザから 3 つの別々のタブ (Chrome) でURL をhttp://localhost:8090/test/test.jsp
3 回続けてヒットしました。
<%@ page import="java.util.Date" %>
<%
out.println("Hello there dude");
System.out.println("Hello there my friend "+ new Date() +"
"+Thread.currentThread().getName());
try {
Thread.sleep(5000);
} catch(Exception e)
{
e.printStackTrace();
}
%>
`
Tomcat 7 またはその他のバージョンの Tomcat で実行すると、JSP サーブレットが複数のリクエストをブロックし、コンソールにこのような出力が表示されます。
こんにちは、私の友人 Thu Feb 02 19:31:35 MST 2012 http-bio-8090-exec-1
こんにちは、私の友人 Thu Feb 02 19:31:40 MST 2012 http-bio-8090-exec-3
こんにちは、私の友人木曜日 2 月 2 日 19:31:45 MST 2012 http-bio-8090-exec-4
時間を調べると、JSP サーブレットが連続して実行されていることがわかります。私はそれらをすべて同時に開始したので、互いに 1 秒以内に終了するはずですが、後続の要求は前の要求が完了するまで開始されません。これらは上記の開始時間であり、ブラウザは最後のリクエストで 15 秒間ハングします。シングルスレッドの動作を求めているわけではないので、仕様を理解していれば、JSP リクエストは並行して実行されるはずです。
興味深いことに、Tomcat は上記のように異なるスレッドを割り当てていますが、確実に連続して実行されています。進行中のリクエストが終了するまで、コンテナーが処理する新しい JSP サーブレット スレッドを解放しないようです。私たちは Web サービスを 1 日中実行していますが、問題なく並行して実行されているようです。
マルチコアの Windows ボックスと、200 のスレッドが利用可能なデフォルトの Tomcat 構成で実行しています。