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

Каков жизненный цикл HttpServlet?

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

4b9b3361

Ответ 1

  • создается сервлет при запуске приложения (он развертывается в контейнере сервлетов) или при первом доступе (в зависимости от настройки load-on-startup)
  • когда создается сервлет, метод init() сервлета называется
  • тогда сервлет (его единственный экземпляр) обрабатывает все запросы (его метод service() вызывается несколькими потоками). Поэтому не рекомендуется иметь в нем какую-либо синхронизацию, и вам следует избегать переменных экземпляра сервлета
  • когда приложение не развернуто (контейнер сервлета останавливается), вызывается метод destroy().

Ответ 2

Жизненный цикл хорошо определен и доступен с помощью методов жизненного цикла, открытых в методах init, service и destroy Servlet.

И, несмотря на то, что еще сказано здесь, это все, на что вы можете рассчитывать, из спецификации. В принципе, вы получаете эти три метода и гарантируете, что сервлеты не являются потокобезопасными. То, что один сервлет МОЖЕТ быть одновременно доступен одним или несколькими запросами.

В спецификации нет ничего, что ограничивает сервлет одним экземпляром контейнера, если контейнер решает, он может получить запрос, создать сервлет, вызвать его init, затем обслуживать, затем уничтожить методы и установить его бесплатно для сбора мусора.

Индивидуальные контейнеры имеют потенциально разные реализации.

В большинстве контейнеров создается один экземпляр. Но спецификация не гарантирует этого, поэтому вы не должны полагаться на него.

Также рассмотрим что-то вроде Google App Engine. GAE ОЧЕНЬ агрессивно постоянно истекает и закрывает все веб-приложения, которые не получают трафика. Если у вас мало посещаемый сайт, вы можете очень хорошо ожидать, что все приложение начнет работу, запустит все его службы, запустит сервлеты загрузки на запуск, выполнит запрос и затем выключит все. Таким образом, на GAE необходимо, чтобы у вас был очень быстрый запуск приложения, чтобы поддерживать какое-либо подобие производительности.

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

Ответ 3

Сервлет живет до тех пор, пока это приложение делает.

Ответ 4

Сервлет не связан с сеансом, это объект службы, который создается контейнером, когда это необходимо, и, как правило, поддерживается в течение всего срока службы webapp. Обычно он отвечает на запросы нескольких клиентов (и сеансов), даже на одновременные запросы. Именно поэтому ваш код сервлета должен быть потокобезопасным, и вы никогда не храните в поле сервлета некоторые данные, связанные с запросом или сеансом.

Ответ 5

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

  • Сервлет инициализируется вызовом метода init().
  • Сервлет вызывает метод service() для обработки запроса клиента.
  • Сервлет завершается вызовом метода destroy().
  • Наконец, сервлет - это мусор, собранный сборщиком мусора JVM.

Подробнее здесь..

http://www.dzone.com/links/r/java_ee_servlets_life_cycle.html

Ответ 6

когда я правильно помню, что сервлеты живут как Singletons в контейнере сервлетов (например, Tomcat). Я не уверен, что первый экземпляр является ленивым, что означает, что Servlet создается только при необходимости, но я предполагаю, что это можно проверить в соответствующих источниках загрузчика классов сервлетов.  Жизненный цикл сервлета завершается, и метод destroy() вызывается, когда контейнер сервлета закрыт.  Вы можете легко проверить это, установив точки останова или выполнив вход в соответствующие методы init() и destroy() и конструктор, а затем просто проверьте, когда код будет выполнен в вашем отладчике/файле журнала.

надеюсь, что это помогло.

Литература:  Tomcat Classloader howto

Ответ 7

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

Сервлет-объект живет в кучке серверного компьютера, пока приложение не развернуто или сервлетКонтинатор выключен, объект сервлета не умрет.

Технически: servletcontainer содержит servletobject и servletobject содержит объект servletConfig

Servletcontainer может вызывать только 3 метода своего жизненного цикла 1) init() 2) service() 3) destroy()

Ответ 8

На самом деле сервлет может быть уничтожен и воссоздан в любое время! Поэтому другие ответы описывают весь жизненный цикл, но пропустите эту важную деталь. Из спецификации сервлета:

Контейнер сервлета не требуется для хранения сервлета, загруженного для любого конкретного период времени. Экземпляр сервлета может быть активен в контейнере сервлета для период в миллисекундах, для срока службы контейнера сервлетов (который может быть количество дней, месяцев или лет) или любое промежуток времени между ними.

[...]

Как только метод destroy вызывается в экземпляре сервлета, контейнер может не маршрутизировать другие запросы к этому экземпляру сервлета. Если контейнер должен включить сервлет снова, он должен сделать это с помощью нового экземпляра класса сервлетов.

Ответ 9

Жизненный цикл типичного сервлета, запущенного на Tomcat, может выглядеть примерно так:

1.Tomcat получает запрос от клиента через один из его соединителей.

2.Tomcat сопоставляет этот запрос соответствующему движку для обработки. Эти двигатели содержатся в других элементах, таких как хосты и серверы, которые ограничивают область поиска Tomcat правильным Engine.

3. Когда запрос был сопоставлен с соответствующим сервлетом, Tomcat проверяет, загружен ли этот класс сервлета. Если это не так, Tomcat компилирует сервлет в байт-код Java, который является исполняемым JVM и создает экземпляр сервлета.

4.Tomcat инициализирует сервлет, вызывая его метод init. Сервлет включает в себя код, который способен читать файлы конфигурации Tomcat и действовать соответствующим образом, а также объявлять любые ресурсы, которые могут потребоваться, чтобы Tomcat мог создавать их упорядоченным, управляемым образом.

5. После того, как сервлет был инициализирован, Tomcat может вызвать метод службы сервлета для обработки запроса, который будет возвращен в качестве ответа.

6. Во время жизненного цикла сервлета Tomcat и сервлет могут связываться через классы слушателей, которые контролируют сервлет для различных изменений состояния. Tomcat может извлекать и сохранять эти изменения состояния различными способами и разрешать другим сервлетам доступ к ним, позволяя сохранять состояние и получать доступ к различным компонентам данного контекста в течение одного или нескольких сеансов пользователя. Примером этой функциональности в действии является приложение электронной коммерции, которое запоминает, что пользователь добавил в свою корзину, и может передавать эти данные в процесс проверки.

7.Tomcat вызывает метод уничтожения сервлета для плавного удаления сервлета. Это действие запускается либо с помощью изменения состояния, которое прослушивается, либо внешней командой, переданной Tomcat, чтобы развернуть сервлет Контекст или закрыть сервер.

Ссылка:

https://www.mulesoft.com/tcat/tomcat-servlet

Ответ 10

life cycle of servlet >
1) load the class.
2) instantiate the servlet.
3) servlet container construct the servlet config interface.
4) container call the init() and pass the servlet config object.
5) httpRequest and httpResponse object created.
6) container call the service() and pass the httpRequest and httpResponse object as argument.
7) process the service method.and if have any other request then follow the step 4 again.
8) other wise container call the distroy().