У меня есть следующий простой JSP, работающий в Tomcat 7. Больше ничего в контейнере и нет web.xml. Я нажал на ссылку http://localhost:8090/test/test.jsp
три раза подряд в браузере на трех отдельных вкладках (Chrome).
<%@ 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 блокирует несколько запросов, и я получаю вывод, подобный этому, в консоли.
Здравствуйте, мой друг Чт 02 февраля 19:31:35 MST 2012 http-bio-8090-exec-1
Здравствуйте, мой друг Чт 02 февраля 19:31:40 MST 2012 http-bio-8090-exec-3
Здравствуйте, мой друг Чт 02 февраля 19:31:45 MST 2012 http-bio-8090-exec-4
Если вы посмотрите на время, вы увидите, что сервлеты JSP выполняются последовательно. Я запустил их все одновременно, поэтому я считаю, что они должны завершиться в течение секунды, но последующие запросы не начнутся, пока не завершится предыдущий запрос. Это время запуска выше, и браузер будет зависать при последнем запросе в течение 15 секунд. Запросы JSP должны выполняться параллельно, если я понимаю спецификацию, поскольку я не запрашиваю однопоточное поведение.
Интересно, что Tomcat выделяет разные потоки, как показано выше, но они определенно выполняются последовательно. Это похоже на то, что контейнер не выпустит новый поток сервлета JSP для обработки, пока не завершится исходящий запрос. Мы запускаем веб-сервисы весь день, и они, похоже, работают параллельно, просто отлично.
Я работаю на многоядерной Windows-системе и по умолчанию в конфигурации Tomcat, в которой доступно 200 потоков.