[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-servlety-kak-konteyner-servletov-upravlyaet-zhiznennym-tsiklom-servleta":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},516,"kak-konteyner-servletov-upravlyaet-zhiznennym-tsiklom-servleta",13,"servlety","Сервлеты","🖧","Как контейнер сервлетов управляет жизненным циклом сервлета","Контейнер управляет четырьмя фазами жизненного цикла сервлета: загрузка класса, инициализация, обработка запросов и уничтожение. Сервлет создаётся при первом обращении (или при старте приложения, если задан `load-on-startup`) и живёт до остановки приложения.\n\n### Фазы жизненного цикла\n\n```\nЗагрузка класса  →  init()  →  service() (многократно)  →  destroy()\n```\n\n| Фаза | Что происходит | Сколько раз |\n|------|---------------|-------------|\n| Загрузка | Контейнер загружает класс в память и вызывает конструктор без параметров | 1 раз |\n| Инициализация (`init()`) | Контейнер создаёт `ServletConfig` и передаёт его через `init()`. Сервлет получает доступ к параметрам конфигурации | 1 раз |\n| Обработка запросов (`service()`) | Для каждого запроса контейнер создаёт новый поток и вызывает `service()`, передавая объекты запроса и ответа | Многократно |\n| Уничтожение (`destroy()`) | Контейнер вызывает `destroy()` при остановке приложения. Сервлет освобождает ресурсы | 1 раз |\n\nВажно: один экземпляр сервлета обрабатывает все запросы в разных потоках. Поэтому в полях сервлета нельзя хранить данные, специфичные для конкретного запроса — это приведёт к состоянию гонки (race condition).\n\n> **На собеседовании:** ключевой момент — сервлет является синглтоном в рамках контейнера. Метод `service()` вызывается в разных потоках одновременно, поэтому сервлет должен быть потокобезопасным. Частая ошибка — забыть упомянуть многопоточность.","","junior",[15],"servlets",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Как контейнер сервлетов управляет жизненным циклом сервлета — Gymterview","Контейнер управляет четырьмя фазами жизненного цикла сервлета: загрузка класса, инициализация, обработка запросов и уничтожение. Сервлет создаётся при первом об","Контейнер управляет четырьмя фазами жизненного цикла сервлета: загрузка класса, инициализация, обработка запросов и унич",[15,13],"Контейнер управляет четырьмя фазами жизненного цикла сервлета: загрузка класса, инициализация, обработка запросов и уничтожение. Сервлет создаётся при первом обращении (или при старте приложения, если задан `load-on-startup`) и живёт до остановки приложения.",true]