Подтвердить что ты не робот

Является ли сервлет одиночным?

Чтение некоторой книги, в которой говорится, что сервлет является одноточечным со стороны контейнера. Это правда?

Однако даже это одноэлемент, нам нужно обрабатывать синхронизацию данных и т.д.

4b9b3361

Ответ 1

Нет. Вы можете создавать один и тот же класс сервлета много раз под разными именами сервлетов и URL-адресами в одном и том же веб-контейнере и даже в том же веб-приложении.

Ответ 2

Глядя на определение шаблона Singleton, как определено в Cunningham and Cunningham, Inc. Wiki

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

Я бы сказал, нет. С точки зрения контейнера принимается и управляется один объект сервлета, включая создание ServletContext, но это не мешает тому, что существует не более одного экземпляра сервлет.

Что касается таких проблем, я думаю, что лучше всего изучить соответствующий контракт, который есть в случае сервлетов, определенных в Java Servlet Specification. Они рассмотрели количество экземпляров сервлета.

2.2 Число экземпляров

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

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

Он указывает только, что контейнер должен использовать только один экземпляр (в первом случае) и как указывает EJP в комментарии:

В спецификации сервлета нет ничего, что мешало бы вам повторное создание того же класса сервлета под другим именем в одно и то же веб-приложение. Эрго, а не синглтон.

Ссылка Java Servlet Specification 3.0 MR (стр .6-7)

Ответ 3

Нет, сервлет не является синглом. Он может создавать 2-й объект, в зависимости от входящего запроса и поведения контейнера.