Сервлеты
Сервлет — класс, который обрабатывает 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.
• жизненный цикл сервлета и как DispatcherServlet с ним связан (если дошёл до 2-го слоя).