SpringMVC — это веб-фреймворк, реализованный на основе Servlet API, и процесс его выполнения можно условно разделить на следующие этапы:
- Когда пользователь отправляет запрос, запрос сначала будет получен DispatcherServlet (фронт-контроллер).
- DispatcherServlet (фронт-контроллер) определит, какой контроллер использовать для обработки запроса, на основе URL-адреса в запросе.
- Согласно HandlerMapping (сопоставитель обработки) в файле конфигурации, DispatcherServlet (фронт-контроллер) перенаправляет запрос соответствующему контроллеру.
- Контроллер обработает запрос в соответствии с бизнес-логикой и вернет результат на DispatcherServlet (фронт-контроллер).
- DispatcherServlet (фронт-контроллер) вызовет ViewResolver (преобразователь представления), чтобы найти соответствующее представление.
- View отобразит результат и вернет его DispatcherServlet (фронт-контроллеру).
- DispatcherServlet (фронт-контроллер) возвращает результат клиенту.
В частности, поток выполнения SpringMVC выглядит следующим образом:
- Клиент отправляет HTTP-запрос на сервер.
- После того, как сервер получит запрос, он будет передан DispatcherServlet (фронт-контроллеру) для обработки.
- DispatcherServlet (фронт-контроллер) выбирает соответствующий контроллер через HandlerMapping (сопоставитель обработки) в соответствии с информацией запроса.
- Контроллер возвращает объект ModelAndView (модель и представление) после обработки запроса.
- DispatcherServlet (фронт-контроллер) находит соответствующий View через ViewResolver (преобразователь представлений).
- Представление визуализирует ModelAndView (модель и представление) в HTML-страницы.
- HTML-страница возвращается клиенту в качестве содержимого ответа.
В этом процессе следует отметить, что при инициализации DispatcherServlet будет загружен файл конфигурации SpringMVC, который включает информацию о конфигурации HandlerMapping и ViewResolver. Эта информация о конфигурации будет использоваться для маршрутизации запросов и анализа данных ответов. В то же время вам также нужно обратить внимание на использование аннотации RequestMapping, которая может указать соответствующую связь между URL-адресом и контроллером, чтобы более гибко обрабатывать различные запросы.