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.