Почему метод сервлета init () запускается в другом потоке? - PullRequest
5 голосов
/ 02 апреля 2019

Это отрывок из книги "Head First Servlets and JSP". Я не понимаю, почему один метод init() работает в потоке A, а методы service(), которые идут после запуска в другом потоке, B.

Означает ли это, что каждый запрос от браузера к сервлету получает два потока? Или init() является общим для всех экземпляров сервлета, которые может создать контейнер? Это было бы неправильно, потому что это не статический метод?

enter image description here

Ответы [ 2 ]

5 голосов
/ 02 апреля 2019

Сервлет инициализируется только один раз init(), но для каждого нового запроса создается новый поток или выделяется из пула для вызова этого экземпляра servlet в соответствующем методе.


Объекты HttpRequest и HttpResponse будут новыми для каждого нового запроса, а поток , но не экземпляр сервлета .

1 голос
/ 02 апреля 2019

Это описание относится к одному экземпляру сервлета.Интуитивно вы можете думать об этом как об обработке запросов в других потоках, чтобы не блокировать основной поток.Если запрос является дорогостоящим, нет смысла замораживать приложение для его обслуживания, поэтому каждый запрос приводит к форку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...