Что означает значение сервлета <load-on-startup>

Я немного запутался. В нашем приложении у нас определено несколько сервлетов. Вот выдержка из web.xml для одного из сервлетов:

<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>com.foo.framework.axis2.http.FrameworkServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet> 

В соответствии с моим пониманием значение для <load-on-startup> должно быть положительным целым, чтобы оно автоматически загружалось. Я посмотрел на google, но ответы, которые я натолкнулся, только добавили к моей путанице.

Ответ 1

Resin 3.0 документирует это поведение:

load-on-startup может указывать (необязательное) целочисленное значение. Если значение равно 0 или больше, он указывает порядок загрузки сервлетов, сервлеты с более высокими номерами получают загружается после сервлетов с более низкими номерами.

JSP 3.1 spec (JSR 340) говорит об этом на странице 14-160:

Элемент load-on-startup указывает, что этот сервлет должен быть загружен (экземпляр и имеют init()) при запуске веб-приложения. Содержание этого элемента элемент должен быть целым числом, указывающим порядок, в котором должен быть сервлет загружен. Если значение представляет собой отрицательное целое число или элемент отсутствует, контейнер может загружать сервлет всякий раз, когда он выбирает. Если значение является положительным integer или 0, контейнер должен загрузить и инициализировать сервлет, поскольку приложение развертывается. Контейнер должен гарантировать, что сервлеты с меньшими целыми числами загружаются до сервлетов, отмеченных более высокими целыми числами. Контейнер может выбрать порядок загрузки сервлетов с тем же значением load-on-startup.

Вероятно, вы хотите проверить не только JSR, но и документацию для своего веб-контейнера. Могут быть различия

Ответ 2

Короткий ответ: значение >= 0 означает, что сервлет загружается при развертывании веб-приложения или при запуске сервера. значение < 0: сервлет загружается всякий раз, когда контейнер чувствует себя.

Длинный ответ (из спецификации):

Элемент load-on-startup указывает, что это сервлет должен быть загружен (создан и создан его init()) при запуске сети выражение. Дополнительное содержимое этих элемент должен быть целым числом, указывающим порядок в который должен быть загружен сервлет. Если значение является отрицательным целым числом, или элемент не является присутствует, контейнер может загрузить сервлет когда он выбирает. Если значение является положительным 128 integer или 0, контейнер должен загружать и инициализировать сервлет, поскольку приложение развертывается. Контейнер должен гарантировать, что загружаются сервлеты с наименьшими целыми числами перед сервлетами, отмеченными более высокими целыми числами. контейнер может выбрать порядок загрузки сервлеты с одинаковым значением нагрузки при запуске.

Ответ 3

Это означает, что сервлет не будет запущен, пока запрос не попытается получить к нему доступ.

Если загрузка при запуске больше нуля или равна нулю, то при запуске контейнера он запускает этот сервлет в порядке возрастания нагрузки на загружаемое вами значение запуска (то есть 0, 1, затем 2, затем 5, затем 10 и так далее).

Ответ 4

Жизненный цикл сервлета

Жизненный цикл сервлета контролируется контейнером, в котором был установлен сервлет. Когда запрос сопоставляется сервлету, контейнер выполняет следующие шаги.

  • Если экземпляр сервлета не существует, веб-контейнер:

    a. Загружает класс сервлета

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

    c. Инициализирует экземпляр сервлета, вызывая метод init (инициализация рассматривается в Создание и инициализация сервлета)

  • Контейнер вызывает метод службы, передавая объекты запроса и ответа. Способы обслуживания обсуждаются в Дать методы обслуживания.

Значение 0 на load-on-startup означает, что точка 1 выполняется, когда запрос поступает к этому сервлету. Другие значения означают, что точка 1 выполняется при запуске контейнера.

Ответ 5

Как указано в другом ответе, и эта статья загрузки при загрузке ноль является приемлемым, и в отсутствие какого-либо другого сервлета это будет иметь приоритет при загрузке и загрузке во время развертывания. Лучше всего использовать load-on statup - загружать сервлеты, которые занимают больше времени, чтобы инициализировать до первого запроса, как сервлеты, которые создают пул соединений или делают сетевой вызов или содержат громоздкий ресурс, что значительно сократит время отклика для первого запроса.

Ответ 6

  • Если значение равно одному для двух сервлетов, то они будут загружены в том порядке, в котором они объявлены в файле web.xml.
  • if is 0 или отрицательное целое, чем Servlet будет загружаться, когда контейнер будет загружать их.
  • гарантирует загрузку, инициализацию и вызов метода init() сервлета с помощью веб-контейнера.
  • Если для сервлета нет элемента, который будет загружен, когда веб-контейнер решает загрузить их.

Ответ 7

да, он может иметь такое же значение.... причина для ввода чисел для загрузки при запуске - это определить последовательность для сервера для загрузки всего сервлета. сервлет с 0 значением нагрузки на запуск загрузится первым, и после этого загрузится сервлет со значением 1.

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

Ответ 8

- > (Отсутствие нагрузки при запуске) Прежде всего, когда сервлет развертывается на сервере, ответственность за создание объекта сервлета лежит на сервере.  Например: предположим, что Servlet развернут на сервере, (серверный объект недоступен на сервере) клиент отправляет запрос на сервлет в первый раз, после чего сервер создает объект сервлета с помощью конструктора по умолчанию и сразу вызывает init(). Из этого, когда клиент когда-либо отправляет запрос, только сервисный метод будет выполнен, поскольку объект уже доступен.

Если в дескрипторе развертывания используется тег load-on-start-up:  Во время развертывания сервер создает объект сервлета для сервлетов на основе положительного значения между метками. Создание объектов для классов сервлетов будет следовать из 0-128  Сначала будет создан 0-й сервлет и последующие другие номера.

Если мы предоставим одинаковое значение для двух сервлетов в web.xml, то создание объектов будет выполняться на основе позиции классов в web.xml также варьируется от сервера к серверу.

Если мы укажем отрицательное значение между загрузкой при запуске тега, тогда сервер не создаст объект сервлета.

Другие сценарии, где сервер создает объект для сервлета.

Если мы не используем загрузку при запуске тега в web.xml, тогда проект развертывается, когда клиент когда-либо отправляет запрос для первого сервера, создает объект, а сервер отвечает за вызов его методов жизненного цикла. Затем, если .class был изменен на сервере (tomcat). снова клиент отправляет запрос на модифицированный сервлет, но в случае tomcat новый объект не будет создан, а сервер будет использовать существующий объект, если не произойдет перезапуск сервера. Но в классе веб-логики, когда когда-либо .class файл модифицируется на сервере без перезапуска сервера, если он получает запрос, сервер вызывает метод destroy на существующем сервлете и создает новый объект-сервлет и вызывает init() для его инициализации.

Ответ 9

Если значение равно < 0, сервлет создается при поступлении запроса else >= 0, то контейнер будет загружаться в порядке возрастания значений. если 2 или более сервлета имеют одинаковое значение, то порядок сервлетов, объявленных в web.xml.

Ответ 10

Контейнер сервлета загружает сервлет во время запуска или при первом запросе. Загрузка сервлета зависит от атрибута "load-on-startup" в файле "web.xml". Если атрибут имеет положительное целое число (от 0 до 128), то сервлет загружается с загрузкой контейнера, в противном случае он загружается, когда первый запрос приходит для обслуживания.

Когда сервлет загружается после запроса, он называется "Lazy loading".

Примечание: 0 также является положительным целым числом.

Ответ 11

Это просто, как вы даже не ожидаете.

Если значение положительное, оно загружается при запуске контейнера

Если значение не является положительным, когда подача загружается при выполнении запроса.