Весняний підручник з 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. Весняний 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; } }

У цьому прикладі ми зареєстрували компонент 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. Весняний MVC із завантаженням

Spring Boot - це доповнення до Spring Platform, що дозволяє дуже легко розпочати роботу та створити окремі додатки виробничого рівня. Завантажувач не призначений замінити Spring, а зробити роботу з ним швидшою та простішою.

6.1. Весняні завантажувачі

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

Вони мають ту перевагу, що нам більше не потрібно вказувати версію для кожної залежності, а натомість дозволяють стартеру керувати залежностями для нас.

Найшвидший спосіб розпочати роботу - це додати spring-boot-starter-parent pom.xml:

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

Це подбає про управління залежністю.

6.2. Точка входу весняного завантаження

Кожному додатку, побудованому за допомогою Spring Boot, потрібно лише визначити основну точку входу. Зазвичай це клас Java з основним методом, анотований @SpringBootApplication :

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

Ця анотація додає такі інші анотації:

  • @Configuration - який позначає клас як джерело визначень компонентів
  • @EnableAutoConfiguration - який повідомляє фреймворку автоматично додавати компоненти на основі залежностей від шляху до класу
  • @ComponentScan - який сканує інші конфігурації та компоненти в тому ж пакеті, що і клас 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.