Пролетен урок за 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; } }

В този пример сме регистрирали зърно 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 с Boot

Spring Boot е допълнение към Spring Platform, което улеснява много започването и създаването на самостоятелни приложения от производствен клас. Boot не е предназначен да замени 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 - който сканира за други конфигурации и компоненти в същия пакет като класа на приложението или по-долу

С Spring Boot можем да настроим интерфейс, използвайки Thymeleaf или JSP, без да използваме ViewResolver, както е дефинирано в раздел 3. Чрез добавяне на зависимостта spring-boot-starter-thymeleaf към нашия pom.xml, Thymeleaf се активира и не е необходима допълнителна конфигурация.

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

И накрая, ако искате да започнете с Spring Boot, разгледайте нашето справочно въведение тук.

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

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

Внедряването на този прост урок за MVC Spring може да бъде намерен в проекта GitHub.

Когато проектът се изпълнява локално, sample.jsp може да бъде достъпен на // localhost: 8080 / spring-mvc-basics / sample.