Каркас проекта Spring MVC. Использование аннотаций

В предыдущей статье мы рассмотрели каркас проекта на Spring MVC в котором используется XML конфигурация. Однако это подход на сегодняшний день уже устарел и вместо него рекомендуется использовать аннотации.

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

Подключение библиотек

Перед началом написания кода нужно подключить требуемые библиотеки. Ниже приведён минимально необходимый набор библиотек для проекта Spring MVC в формате Maven (фрагмент файла pom.xml).

Стандартный проект Spring MVC использует четыре библиотеки. Но, непосредственно к Spring относятся только первые две ( spring-context и spring-webmvc). Третья библиотека, это web компоненты Java EE (сервлеты и пр.). Четвёртая — вспомогательная библиотека для работы с JSON (даже если вы не используете в проекте REST она должна присутствовать).

Конфигурация

При использовании аннотаций, помимо файла dispatcher-servlet.xml требуется ещё один конфигурационный файл applicationContext.xml. Именно в нём и задаётся использование аннотаций, но и в dispatcher-servlet.xml также требуется включить соответствующие директивы.

В прочем в файле dispatcher-servlet.xml в данном случае директива остаётся всего одна. Она задаёт расположение корневой папки с файлами представлений (p:prefix) и их расширение (p:suffix).

Таким образом, содержимое этого файла по сравнении с ранее описанным подходом сократилось до минимума.

В файле applicationContext.xml директив не намного больше. Он включает две директивы. Первая (context:component-scan) задаёт пакет, в котором Spring MVC должен искать компоненты приложения. А, вторая (mvc:annotation-driven), как можно догадаться из названия, включает поддержку аннотаций.

Содержимое конфигурационного файла web.xml принципиально ничем не отличается от проектов на основе XML конфигурации. Однако для полноты описания приведём и его.

Контроллеры

Классы контроллеров обозначаются аннотацией @Controller, а методы действия аннотацией @RequestMapping.

Последняя обычно принимает два параметра:

  • Маршрут для вызова действия (по сути часть URL адреса, которая сопоставляется с методом действия, обязательный параметр);
  • Метод вызова (например GET (по умолчанию) или POST).

Ниже приведён пример, контроллера, который поддерживает несколько методов действий.

В данном примере методы действий возвращают страницы сайта, которые описаны в соответствующих JSP файлах в папке multi. Последняя расположена в корневой папке для файлов представлений, которая была задана в файле dispatcher-servlet.jsp.

В соответствии с аннотациями @RequestMapping, при обращении, например, по адресу https://site.ru/multi/ будет выполнен метод index, а по адресу по адресу https://site.ru/multi/test/ метод test.

Особого внимания заслуживает то, что собой представляет сам класс контроллера.

При использовании XML конфигурации, любой контроллер, это наследник соответствующего базового класса. Но, в случае подхода основанного на аннотациях, в качестве контроллера может выступить и самый обычный POJO, что предоставляет разработчикам значительно больше свободы.

Заключение

В этой статье мы познакомились с современным способом построения проектов на базе Spring MVC.

К сожалению, в рамках одной статьи невозможно описать все нюансы такой технологии как Spring, но данная статья и не преследует таких целей. По существу, речь идеё о «быстром старте» для создания основы проекта и понимания ключевых аспектов его работы.

Также как и в прошлый раз, в заключении мы приведём примерную структуру файлов и папок проекта.

Подобная структура является практически стандартной для web проектов на основе Maven и может быть создана IDE на основе встроенного шаблона. В частности, данный проект был создан в NetBeans.

Однако не всегда IDE содержат готовый шаблон для сочетания Maven и Spring. Поэтому вполне вероятно, что конфигурационные файлы, файлы представлений, классы контроллеров и т. д. Вам придётся создавать полностью самостоятельно.

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

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