Сколько экземпляров создается для сервлета HTTP

Я читаю книгу "Java Web Services: Up and Running, 2nd Edition" и наткнулся на выражение, в котором говорится:

Веб-сервер, такой как Tomcat, может создавать произвольно множество экземпляров сервлета, хотя число обычно невелико (например, от 1 до 4). Сам веб-сервер принимает решение.

Итак, это означает, что если я создам сервлет, тогда сервер может создать более одного экземпляра, но это противоречит объяснению, данному во многих сообщениях, например, если я зарегистрирую этот пост: "10 запросов клиентов для сервлета. Как много экземпляров сервлета создаются", то в нем четко сказано, что:

Существует только один экземпляр сервлета (для каждого загрузчика классов) и каждый запрос будет подан в свой поток

Итак, пожалуйста, помогите мне в понимании этого, может ли сервер создать более одного экземпляра для сервлета?

Ответ 1

Спецификация сервлета утверждает

Для сервлета, не размещенного в распределенной среде (по умолчанию) контейнер сервлета должен использовать только один экземпляр на сервлет. Однако для сервлета, реализующего SingleThreadModel, контейнер сервлета может создавать экземпляр несколько экземпляров для обработки большой нагрузки запроса и сериализации запросы к конкретному экземпляру.

В случае, когда сервлет был развернут как часть приложения помеченный в дескрипторе развертывания как распространяемый, контейнер может имеют только один экземпляр для объявления сервлета на Java Virtual Машина (JVM). Однако, если сервлет в распределяемом приложение реализует интерфейс SingleThreadModel, контейнер может создавать несколько экземпляров этого сервлета в каждой JVM контейнер.

Итак, это зависит от того, как вы развернуты.

Как было предложено в комментариях, SingleThreadModel устарел долгое время.

Ответ 2

по умолчанию сервлеты являются внутренними многопоточными. поэтому создается только один экземпляр и к нему будут доступны несколько потоков.