Карта / Сервлеты и JSP / Сервлеты

Сервлеты

Сервлет — класс, который обрабатывает HTTP-запросы напрямую, без всех удобств Spring MVC поверх него. Это фундамент, на котором построен весь Java-веб, включая сам DispatcherServlet (см. тему «DispatcherServlet») — он тоже сервлет, просто очень развитый.

@WebServlet("/hello")
class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setContentType("text/plain");
        resp.getWriter().write("Привет, " + req.getParameter("name"));
    }
}

doGet/doPost/doPut/doDelete — методы, соответствующие HTTP-методам, переопределяешь только нужные.

Копнуть глубже

Что сервлет даёт “из коробки”, а что приходится писать руками самому:

  • HttpServletRequest — доступ к параметрам, заголовкам, телу запроса;
  • HttpServletResponse — формирование ответа (статус, заголовки, тело);
  • Парсинг JSON, маппинг URL на методы, валидация — всё это самостоятельно, Spring MVC берёт это на себя автоматически.

Жизненный цикл сервлета — контейнер (Tomcat) создаёт один экземпляр сервлета на всё приложение (похоже на singleton бин — см. тему «Scope, @Qualifier») и переиспользует его для всех запросов, вызывая init() один раз при старте, service()/doGet()/doPost() на каждый запрос, destroy() при остановке.

Понимание сервлетов помогает понять, что реально происходит, когда Spring MVC обрабатывает запросDispatcherServlet — это всё тот же HttpServlet, просто с готовой логикой маршрутизации к контроллерам поверх голого API.

🎤 Закрыл тему, если можешь объяснить:
• что такое сервлет и как выглядит обработка запроса через `doGet`;
• жизненный цикл сервлета и как DispatcherServlet с ним связан (если дошёл до 2-го слоя).