Какие основные методы есть у сервлета (Servlet) и для чего они предназначены?

«Какие основные методы есть у сервлета (Servlet) и для чего они предназначены?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Сервлет — это Java-класс, обрабатывающий HTTP-запросы и формирующий ответы. Его жизненный цикл и логика обработки определяются ключевыми методами. **Основные методы и их назначение:** 1. **`init(ServletConfig config)`:** Вызывается контейнером сервлетов (например, Tomcat) один раз при создании экземпляра сервлета. Используется для однократной инициализации ресурсов (загрузка конфигурации, подключение к БД). 2. **`service(ServletRequest req, ServletResponse res)`:** Вызывается для каждого запроса. По умолчанию анализирует тип HTTP-запроса (GET, POST и т.д.) и делегирует обработку соответствующему методу `doXxx()`. 3. **Методы `doXxx(HttpServletRequest req, HttpServletResponse resp)`:** Обрабатывают конкретные типы HTTP-запросов. Разработчик переопределяет их для реализации бизнес-логики. * **`doGet()`:** Для запросов на получение данных (GET). * **`doPost()`:** Для отправки данных (POST). * Аналогично `doPut()`, `doDelete()` и др. ```java @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); resp.getWriter().println("

Обработан GET-запрос

"); } ``` 4. **`destroy()`:** Вызывается контейнером перед выгрузкой сервлета из памяти. Используется для освобождения ресурсов (закрытие соединений, остановка потоков). **Важно:** В современной разработке на Spring MVC или Jakarta EE напрямую переопределять эти методы редко — вместо этого используются аннотации (`@GetMapping`, `@PostMapping`), но понимание их работы критично для основ Java EE.