Spring MVC — основные понятия, архитектура.

Рассмотрим один из самых главных разделов фреймворка Spring — Spring MVC.

Фреймворк Spring Web model-view-controller (MVC) или по нашему модель-представление-контроллер построен вокруг DispatcherServlet, который распределяет запросы по обработчикам. В нём настраивается мэппинг запросов, локали, временные зоны и многое другое. Обработчик по умолчанию строится на аннотациях @Controller и @RequestMapping, которые предоставляют широкий набор гибких методов для обработки запросов. После версии Spring 3.0. механизм @Controller так же позволяет создавать RESTful веб сайты и приложения, используя аннотацию @PathVariable и другие возможности.

В Spring Web MVC вы можете использовать любой объект в качестве команды или объекта с обратной связью; вам нет необходимости реализовывать какой-либо специальный интерфейс фреймворка или базовый класс. Связывание данных в Spring является очень гибким: например, оно рассматривает несоответствие типов как ошибки валидации и поэтому это может быть обработано в приложении, а не в качестве системных ошибок. Таким образом, вам не нужно дублировать свойства бизнес-объектов, в качестве простых нетипизированных строк для ваших объектов форм. Поэтому можно легко обрабатывать неправильные подтверждения (сабмиты) или правильно конвертировать их в строки. Вместо этого, желательно связывать такие объекты напрямую с объектами бизнес логики.

DispatcherServlet

Spring MVC построен вокруг центрального сервлета, который распределяет запросы по контроллерам, а также предоставляет другие широкие возможности при разработке веб приложений. На самом деле DispatcherServlet — полностью интегрированный сервлет в Spring IoC контейнер и таким образом получает доступ ко всем возможностям Spring.

Обработка запросов в DispatcherServlet показана на рисунке ниже. Используется паттерн «pattern-savvy reader», который распознает DispatcherServlet как выражение из шаблона проектирования «Front Controller».

Обработка запросов в Spring MVC

DispatcherServlet — это обычный сервлет (наследуется от базового класса HttpServlet), и его также необходимо описывать в web.xml вашего веб приложения. Вам необходимо указать мэппинг запросов, которые будут обрабатываться в DispatcherServlet, путем указания URL в web.xml. Ниже показана стандартная конфигурация Java EE необходимая для настройки DispatcherServlet:

Все запросы, начинающиеся с /example будут обработаны в диспетчере с именем example. Также вы можете настроить его с помощью аннотаций:

 

Где WebApplicationInitializer — интерфейс, предоставляемый Spring MVC, который гарантирует инициализацию при старте контейнера.

Краткое описание работы DispatcherServlet

Вернемся к картинке выше. В самом начале входящий запрос попадает в Front controller (для нас он не виден). Далее он перенаправляет его в Controller. Именно за эту часть и отвечает разработчик. После обработки запроса посылается ответ к Front controller, и после этого результат используется для отображения представления. Вот такое легкое описание шаблона проектирования модель-представление-контроллер:). Всё это работает в контейнере сервлетов (на картинке подпись — Tomcat)

Немного более подробно показано на следующей схеме:

SpringMVC detail

Что здесь показано?

  • Вначале DispatcherServlet (диспетчер сервлетов) получает запрос, далее он смотрит свои настройки, чтобы понять какой контроллер использовать (на рисунке Handler Mapping).
  • После получения имени контроллера запрос передается в него (на рисунке Controller). В контроллере происходит обработка запроса и обратно посылается ModelAndView (модель — сами данные; view (представление) — как эти данные отображать).
  • DispatcherServlet на основании полученного ModelAndView ищет какое представление ему использовать (View Resolver) и получает в ответе имя представления View
  • В представление передаются данные (model) и обратно, если необходимо, посылается ответ от представления.

Ещё раз основы шаблона mvc:

  • Model — представление данных, сами данные
  • View — представление, вид, отображение
  • Controller — управление, связь между моделью и видом.
Жизненный цикл запроса

Приведу картинку из интернета, которая показывает жизненный цикл запроса. Возможно по ней кому-то будет легче понять как происходит обработка запросов от начала и до конца. В принципе здесь всё тоже самое, но добавлены некоторые пункты, названия которых говорят сами за себя.

RequestLifecycle

Может быть интересно

Spring MVC — WebApplicationContext. Описание интерфейса

Spring MVC – Handler Mapping. Описание интерфейса HandlerMapping

 

Spring MVC – описание интерфейса ViewResolver

 

 

Share Button
31
4933 Total Views 12 Views Today

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*