Учебное пособие по Spring MVC

1. Обзор

Это простое руководство по Spring MVC, показывающее, как настроить проект Spring MVC как с конфигурацией на основе Java, так и с конфигурацией XML.

Зависимости Maven для проекта Spring MVC подробно описаны в статье о зависимостях Spring MVC.

2. Что такое Spring MVC?

Как следует из названия, это модуль фреймворка Spring, работающий с шаблоном Model-View-Controller или MVC . Он сочетает в себе все преимущества шаблона MVC с удобством Spring.

Spring реализует MVC с шаблоном фронтального контроллера, используя свой DispatcherServlet .

Вкратце, DispatcherServlet действует как главный контроллер для маршрутизации запросов к их предполагаемому месту назначения. Модель - это не что иное, как данные нашего приложения, а представление представлено любым из различных механизмов шаблонов. Через некоторое время мы рассмотрим JSP в нашем примере.

3. Spring MVC с использованием конфигурации Java

Чтобы включить поддержку Spring MVC через класс конфигурации Java, все, что нам нужно сделать, это добавить аннотацию @EnableWebMvc :

@EnableWebMvc @Configuration public class WebConfig { /// ... }

Это установит базовую поддержку, которая нам нужна для проекта MVC, такую ​​как регистрация контроллеров и сопоставлений, преобразователи типов, поддержка проверки, преобразователи сообщений и обработка исключений.

Если мы хотим настроить эту конфигурацию, нам нужно реализовать интерфейс WebMvcConfigurer :

@EnableWebMvc @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("index"); } @Bean public ViewResolver viewResolver() { InternalResourceViewResolver bean = new InternalResourceViewResolver(); bean.setViewClass(JstlView.class); bean.setPrefix("/WEB-INF/view/"); bean.setSuffix(".jsp"); return bean; } }

В этом примере мы зарегистрировали bean- компонент ViewResolver, который будет возвращать представления .jsp из каталога / WEB-INF / view .

Здесь очень важно то, что мы можем зарегистрировать контроллеры представлений, которые создают прямое сопоставление между URL-адресом и именем представления, используя ViewControllerRegistry. Таким образом, между ними нет необходимости в каком-либо контроллере.

Если мы хотим также определять и сканировать классы контроллеров, мы можем добавить аннотацию @ComponentScan к пакету, содержащему контроллеры:

@EnableWebMvc @Configuration @ComponentScan(basePackages = { "com.baeldung.web.controller" }) public class WebConfig implements WebMvcConfigurer { // ... }

Чтобы запустить приложение, загружающее эту конфигурацию, нам также понадобится класс инициализатора:

public class MainWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(final ServletContext sc) throws ServletException { AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext(); root.scan("com.baeldung"); sc.addListener(new ContextLoaderListener(root)); ServletRegistration.Dynamic appServlet = sc.addServlet("mvc", new DispatcherServlet(new GenericWebApplicationContext())); appServlet.setLoadOnStartup(1); appServlet.addMapping("/"); } }

Обратите внимание, что для версий ранее, чем Spring 5, мы должны использовать класс WebMvcConfigurerAdapter вместо интерфейса.

4. Spring MVC с использованием конфигурации XML

В качестве альтернативы конфигурации Java, приведенной выше, мы также можем использовать чисто XML-конфигурацию:

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

5. Контроллер и представления

Давайте посмотрим на пример базового контроллера:

@Controller public class SampleController { @GetMapping("/sample") public String showForm() { return "sample"; } }

Соответствующий ресурс jsp - это файл sample.jsp :

Файлы представления на основе JSP расположены в папке / WEB-INF проекта, поэтому они доступны только для инфраструктуры Spring, а не через прямой доступ по URL-адресу.

6. Spring MVC с загрузкой

Spring Boot - это дополнение к Spring Platform, которое упрощает начало работы и создание автономных приложений производственного уровня. Boot предназначен не для замены Spring, а для более быстрой и простой работы с ним.

6.1. Spring Boot Starters

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

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

Самый быстрый способ начать - добавить spring-boot-starter-parent pom.xml:

 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE 

Это позаботится об управлении зависимостями.

6.2. Точка входа в Spring Boot

Каждое приложение, созданное с использованием Spring Boot, должно просто определить основную точку входа. Обычно это Java-класс с основным методом, аннотированным @SpringBootApplication :

@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 

Эта аннотация добавляет следующие аннотации:

  • @Configuration - отмечает класс как источник определений bean-компонентов
  • @EnableAutoConfiguration - указывает фреймворку на автоматическое добавление компонентов на основе зависимостей пути к классам.
  • @ComponentScan - сканирует другие конфигурации и bean-компоненты в том же пакете, что и класс Application, или ниже.

С помощью Spring Boot мы можем настроить внешний интерфейс с использованием Thymeleaf или JSP без использования ViewResolver, как определено в разделе 3. Добавив зависимость spring-boot-starter-thymeleaf к нашему pom.xml, Thymeleaf включается, и дополнительная настройка не требуется.

Исходный код приложения Boot, как всегда, доступен на GitHub.

Наконец, если вы хотите начать работу со Spring Boot, взгляните на наше справочное введение здесь.

7. Заключение

В этом примере мы настроили простой и функциональный проект Spring MVC, используя конфигурацию Java.

Реализацию этого простого учебника Spring MVC можно найти в проекте GitHub.

Когда проект запускается локально, к файлу sample.jsp можно получить доступ по адресу // localhost: 8080 / spring-mvc-basics / sample.