Я немного запутался здесь. В нашем приложении мы определили несколько сервлетов. Вот выдержка из 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, но ответы, с которыми я столкнулся, только добавили моего замешательства.
Краткий ответ : значение> = 0 означает, что сервлет загружается при развертывании веб-приложения или при запуске сервера. значение <0: сервлет загружается всякий раз, когда контейнер чувствует себя как.
Длинный ответ (из спецификации):
источник
Это означает, что сервлет не будет запущен, пока запрос не попытается получить к нему доступ.
Если загрузка при запуске больше или равна нулю, то при запуске контейнера этот сервлет запустится в порядке возрастания значения загрузки при запуске, которое вы там указали (т. Е. 0, 1, затем 2, затем 5, затем 10 и т. Д.). ,
источник
Жизненный цикл сервлета
Значение 0
load-on-startup
означает, что точка 1 выполняется, когда к сервлету приходит запрос. Другие значения означают, что точка 1 выполняется при запуске контейнера.источник
Как указано в другом ответе, нулевая статья о загрузке является приемлемой, и в отсутствие любого другого сервлета это будет иметь приоритет при загрузке и загрузке во время развертывания. Лучше всего использовать статовую загрузку для загрузки сервлетов, для инициализации которых требуется больше времени, прежде чем поступит первый запрос, подобный сервлетам, которые создают пул соединений или выполняют сетевой вызов или удерживают громоздкий ресурс, что значительно сократит время ответа на первые несколько запросов.
источник
источник
да, он может иметь то же значение .... причина присвоения чисел загрузке при запуске состоит в том, чтобы определить последовательность для загрузки сервером всего сервлета. сервлет с 0 значением загрузки при запуске будет загружаться первым, а сервлет со значением 1 будет загружаться после этого.
если два сервлета будут иметь одинаковое значение для загрузки при запуске, то будет загружено, как они объявлены в web.xml сверху вниз. сервлет, который идет первым в web.xml, будет загружен первым, а другой будет загружен после этого.
источник
-> (Отсутствие загрузки при запуске) Прежде всего, когда сервлет развертывается на сервере, сервер отвечает за создание объекта сервлета. Например: предположим, что сервлет развернут на сервере, (объект сервлета недоступен на сервере) клиент отправляет запрос сервлету в первый раз, после чего сервер создает объект сервлета с помощью конструктора по умолчанию и сразу вызывает init (). Из того, что когда клиент отправляет запрос, будет запущен только сервисный метод, так как объект уже доступен
Если в дескрипторе развертывания используется тег загрузки при запуске: Во время самого развертывания сервер создает объект сервлета для сервлетов на основе положительного значения, предоставленного между тегами. Создание объектов для классов сервлетов будет следовать от 0 до 128. Номер сервлета будет создан первым, а за ним - другие числа.
Если мы предоставим одинаковое значение для двух сервлетов в web.xml, то создание объектов будет выполнено на основе положения классов в web.xml, которое также варьируется от сервера к серверу.
Если мы предоставим отрицательное значение между тегом загрузки при запуске, то сервер не создаст объект сервлета.
Другие сценарии, в которых сервер создает объект для сервлета.
Если мы не используем тэг load on start в web.xml, то проект развертывается, когда клиент отправляет запрос в первый раз, когда сервер создает объект, а сервер отвечает за вызов методов его жизненного цикла. Затем, если .class был изменен на сервере (tomcat). клиент снова отправляет запрос на модифицированный сервлет, но в случае tomcat новый объект не будет создан, и сервер использует существующий объект, пока не произойдет перезапуск сервера. Но в классе веб-логики, когда когда-либо .class-файл изменяется на сервере без перезапуска сервера, если он получает запрос, тогда сервер вызывает метод destroy для существующего сервлета и создает новый объект сервлета и вызывает init () для его инициализации ,
источник
Если значение <0, сервлет создается при получении запроса, в противном случае> = 0 контейнер будет загружаться в порядке возрастания значений. если 2 или более сервлета имеют одинаковое значение, то порядок сервлетов объявлен в файле web.xml.
источник
Контейнер сервлета загружает сервлет во время запуска или при первом запросе. Загрузка сервлета зависит от атрибута «загрузка при запуске» в файле «web.xml». Если атрибут имеет положительное целое число (от 0 до 128), то сервлет загружается вместе с загрузкой контейнера, в противном случае он загружается при поступлении первого запроса на обслуживание.
Когда сервлет загружается, как только он получает запрос, он называется «Ленивая загрузка».
источник
Это просто, как вы даже не ожидаете.
Если значение положительное, оно загружается при запуске контейнера
Если значение не является положительным, сервлет загружается при выполнении запроса.
источник