Перейти к основному содержимому

Учебник Spring MVC

· 5 мин. чтения

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.foreach.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.foreach");
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-конфигурацию:

<context:component-scan base-package="com.foreach.web.controller" />
<mvc:annotation-driven />

<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>

<mvc:view-controller path="/" view-name="index" />

</beans>

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

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

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

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

}

И соответствующий ресурс JSP — это файл sample.jsp :

<html>
<head></head>

<body>
<h1>This is the body of the sample view</h1>
</body>
</html>

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

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

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

6.1. Стартеры весенней загрузки

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

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

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

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.1</version>
</parent>

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

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 сообщает платформе автоматически добавлять bean-компоненты на основе зависимостей пути к классам.
  • @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 можно получить по адресу http://localhost:8080/spring-mvc-basics/sample .