Web-приложение на Spring MVC технически само по себе работает на сервлетах: всю обработку запросов берет на себя единый
DispatcherServlet. С его помощью реализуется паттерн
Front Controller.
Если вам нужно определить в программе полностью независимый от Spring-контекста сервлет или фильтр, ничего особенного для этого делать не нужно. Как обычно в Servlet API, нужно объявить класс, добавить его в web.xml как сервлет, добавить для сервлета маппинг.
Сервлет живет вне Spring-контекста,
внедрение зависимостей в нём просто так не заработает. Чтобы использовать autowiring, на
этапе инициализации сервлета вызывается статический
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext, с текущим сервлетом и его контекстом в аргументах. В этом же утилитарном классе есть ряд других средств для работы с контекстом извне.
Если программа построена на Spring Boot, создание бина типа
ServletRegistrationBean поможет добавить сервлеты в рантайме. А для декларативного добавления на этапе компиляции, к классу конфигурации применяется
@ServletComponentScan. С этой аннотацией стартер приложения просканирует и добавит в контекст все web-компоненты в стиле Servlet 3.0: классы с аннотациями
@WebFilter,
@WebListener и
@WebServlet.