Ovladavanje okvirom opruge 5, 1. dio: MVC opruge

Spring MVC je tradicionalna knjižnica Spring framework-a za izgradnju Java web aplikacija. To je jedan od najpopularnijih web okvira za izgradnju potpuno funkcionalnih Java web aplikacija i RESTful web usluga. U ovom vodiču dobit ćete pregled Spring MVC-a i naučiti kako graditi Java web programe pomoću Spring Boot, Spring Initializr i Thymeleaf.

preuzimanje Preuzmite kod Preuzmite izvorni kod, na primjer, programe u ovom vodiču. Stvorio za JavaWorld Steven Haines

Proljetni čizma s Spring Initializr

Izbacićemo našu web aplikaciju Spring MVC uz pomoć Spring Boot i Spring Initializr. S obzirom na ulaz za vrstu aplikacije koja će se graditi, Spring Initializr koristi najčešće ovisnosti i zadane postavke za postavljanje i konfiguriranje osnovne aplikacije Spring Boot. Također možete dodati prilagođene ovisnosti, a Spring Initializr će ih uključivati ​​i upravljati njima, osiguravajući kompatibilnost verzija s softverom treće strane i Springom. Proljetne aplikacije za pokretanje rade samostalno, bez potrebe za pružanjem runtime okruženja.

U ovom slučaju, budući da gradimo web aplikaciju, Spring Boot automatski će uključiti i konfigurirati Tomcat kao dio vremena izvršavanja aplikacije. Aplikaciju također možemo prilagoditi dodavanjem upravljačkog programa H2 baze podataka u našu Maven POM datoteku. Spring Boot tada će automatski stvoriti ugrađenu bazu podataka i DataSourceinstancu u kontekstu aplikacije. Nakon postavljanja ovisnosti, Spring Boot će pružiti zadane konfiguracije za aplikaciju. Naravno, možemo promijeniti konfiguracije ako želimo, ali zahvaljujući Spring Boot-u imamo glavno računalo: potpuno konfiguriranu, radnu aplikaciju odmah iz kutije.

Nakon što odaberemo i konfiguriramo svoje ovisnosti, proslijedit ćemo te odabire Spring Initializr, koji će pružiti ZIP datoteku koja se može preuzeti s osnovnim projektom Spring Boot.

Proljetni MVC s H2 motorom baze podataka

Započet ćemo s izradom osnovne web aplikacije Spring MVC koja zadržava podatke u ugrađenoj bazi podataka H2.

Korak 1. Postavljanje i konfiguriranje aplikacije

Idite na Spring Initializr na start.spring.io i odaberite Generiranje projekta Maven s Javom i Spring Boot 2.0.X , gdje je X najnovija verzija Spring Boot (2.0.3 u vrijeme ovog pisanja). Svakako odaberite Spring Boot 2.x kako biste mogli implementirati Spring Web MVC 5. Spring Boot 1.4 i Spring Boot 1.5 će implementirati Spring 4.

Unesite naziv grupe s formatom koji se podudara s vašom web adresom, kao što je com.geekcap.javaworldi unesite naziv artefakta, kao što je spring5mvc-example. Slika 1 prikazuje moju konfiguraciju.

Steven Haines

Da biste dodali ovisnosti u web aplikaciju, možete unijeti popis ovisnosti odvojenih zarezom u tekstualno polje Traži ovisnosti ili kliknuti Prebaci na punu verziju . Krenut ćemo lakšim putem klikom na Prebaci na punu verziju . Ovisnosti su podijeljene u skupine, kao što su jezgra, web i predložak. U ovom primjeru označite potvrdne okvire za: Web -> Web, Motori predložaka -> Thymeleaf, SQL -> JPA i SQL -> H2 . Evo što će svaki od tih odabira dodati aplikaciji:

  • Web: Spring MVC i Tomcat
  • Thymeleaf: mehanizam web predloška Thymeleaf
  • JPA: proljetni podaci o JPA, hibernaciji i proljeće
  • H2: Ugrađena baza podataka H2

Kada završite, kliknite gumb Generiraj projekt na dnu stranice. Spring Initializr stvorit će gotovu ZIP datoteku sa svim potrebnim izvorima projekta, koju možete preuzeti.

Korak 2. Uvezite projekt Spring Initializr u svoj IDE

Izdvojite ZIP datoteku iz Spring Initializr, a zatim uvezite projekt u svoj omiljeni IDE. Na primjer, da biste uvezli projekt u IntelliJ, odaberite Datoteka -> Novi projekt , kao što je prikazano na slici 2.

Steven Haines

Korak 3. Postavite svoj Maven POM

Zatim idite na Uvoz projekta iz vanjskog modula , odaberite Maven i pritisnite Dalje . Svakako odaberite SDK za projekt Java 1.8, a zatim pritisnite Finish .

Starter aplikacija Spring Boot

Pogledajmo sada pokretačku aplikaciju Spring Boot koja je generirana našim dosadašnjim (minimalnim) naporima.

Za početak, Popis 1 prikazuje Maven POM datoteku.

Popis 1. Maven pom.xml

   4.0.0 com.geekcap.javaworld spring5mvc-example 0.0.1-SNAPSHOT jar spring5mvc-example Demo project for Spring Boot  org.springframework.boot spring-boot-starter-parent 2.0.3.RELEASE     UTF-8 UTF-8 1.8    org.springframework.boot spring-boot-starter-data-jpa   org.springframework.boot spring-boot-starter-thymeleaf   org.springframework.boot spring-boot-starter-web   com.h2database h2 runtime   org.springframework.boot spring-boot-starter-test test      org.springframework.boot spring-boot-maven-plugin     

Obavijest da je POM datoteka koristi poseban roditelj Pom: spring-boot-starter-parent. Koristit ćemo nadređeni POM za upravljanje verzijama svih naših ovisnosti i osigurati da su verzije kompatibilne. Spremišta na kraju datoteke POM upućuju na spremišta snimke proljeća i prekretnice . Potrebni su nam jer je Spring Boot 2.x još uvijek prekretnica u vrijeme pisanja ovog članka.

Ovisnosti su prilično minimalne, a većini su predodređene spring-boot-starter:

  • spring-boot-starter-data-jpa
  • spring-boot-starter-thymeleaf
  • spring-boot-starter-web
  • spring-boot-starter-test

Svaka od ovih početnih ovisnosti donosi sve potrebne zavisnosti. Slika 3 prikazuje djelomično prošireni prikaz ovisnosti u IntelliJ-u.

Steven Haines

POM datoteka uključuje sljedeće ovisnosti:

  • spring-boot-starter-data-jpa uključuje podatke o hibernaciji i proljeće.
  • spring-boot-starter-thymeleaf uključuje mehanizam predloška Thymeleaf.
  • spring-boot-starter-webuključuje spring-boot-starter-tomcatugrađenu verziju Apache Tomcat.
  • spring-boot-starter-json uključuje Jackson JSON knjižnice.
  • spring-web and spring-webmvc uključuje Spring MVC.
  • spring-boot-starter-test uključuje knjižnice za testiranje poput JUnit i Mockito.

Kada Spring Boot vidi ove ovisnosti u CLASSPATH-u, pokreće automatsku konfiguraciju. Na primjer, kada pronađe spring-boot-starter-web, kreira ugrađenu verziju Tomcata, a kada pronađe H2 i spring-boot-starter-jpakreira H2 ugrađenu bazu podataka i hibernaciju EntityManager. Zatim povezuje EntityManagerSpring Data.

Spring Boot također stvara jednu klasu koja se može koristiti za pokretanje aplikacije. Klasa za primjer aplikacije prikazana je na popisu 2.

Popis 2. Spring5mvcExampleApplication.java

 package com.geekcap.javaworld.spring5mvcexample; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Spring5mvcExampleApplication { public static void main(String[] args) { SpringApplication.run(Spring5mvcExampleApplication.class, args); } } 

This class leverages the SpringApplication.run() method, passing in the class to run (Spring5mvcExampleApplication in this example). The @SpringBootApplication annotation includes the following annotations:

  • @Configuration informs Spring that the Spring5mvcExampleApplication class contains configuration information. (This annotation can be used to create beans that will get registered with the Spring context.)
  • @EnableAutoConfiguration tells Spring to automatically configure resources from dependencies found in the CLASSPATH, such as H2 and Tomcat.
  • @ComponentScan tells Spring to scan packages in the CLASSPATH under the current package (com.geekcap.javaworld.spring5mvcexample) for Spring-annotated components such as @Service and @Controller.

Spring scans the CLASSPATH and automatically creates components such as the embedded Tomcat server and H2 database. It then populates the Spring context with the application components found in the package scan. In essence, Spring Boot makes it very easy to select and configure the services, components, controllers, entities, and so forth that you need for your application. Once you've done that, Spring will automatically find them, make them available in the Spring context, and autowire everything together.

We've got our Spring Boot starter project setup and ready to go. In the next section we'll create the Spring MVC components for our Java web application.

What is the Spring context?

The Spring context is a registry of all available Spring beans. Classes are identified as Spring beans by annotating them with specific Spring annotations. Examples include @Service, which identifies a business service, @Controller, which identifies a Spring MVC controller (i.e., handles web requests), and @Entity, which is a JPA annotation used to identify classes that are mapped to database tables.

Once these beans are annotated they need to be registered with the Spring context, which Spring Boot does by performing a package scan of all classes in packages in your project. As the Spring context is being built, it implements the inversion-of-control (IoC) design pattern through dependency injection: when a Spring bean needs a dependency, such as a service or repository, the bean can either define a constructor that accepts the dependent bean or it can leverage the @Autowired annotation to tell Spring that it needs that dependency. Spring resolves all dependencies and "autowires" the application together.

Dependency Injection is a powerful design pattern because, rather than creating and managing dependencies inside your code--which can be messy and leads to tightly coupled classes--you can instead delegate control to the Spring container. Your class simply tells the container what dependencies it needs to run and the container provides the appropriate dependencies to your class at runtime.

About Spring MVC 5

Spring MVC implements the popular Model-View-Controller pattern, which you've probably seen in other web frameworks. The Model-View-Controller pattern separates concerns into three categories:

  • Model represents your domain objects.
  • View renders your model to a view, such as to an HTML page.
  • Controller sits between your view and model and translates change requests in the view into changes in the model, and vice versa. In practical terms, the controller accepts incoming requests, potentially updates the model, and sends your model objects to a "view" to render back to the client.

In Spring MVC, controllers are identified by the @Controller annotation and accompanied by a @RequestMapping annotation. The annotation defines the HTTP verb (standard HTTP commands like GET, POST, PUT, and DELETE) and URI for which the request-mapping method will be applied. Spring 4 introduced shortcut request mappings, which make things even easier. We'll use these mappings--@GetMapping, @PostMapping, @PutMapping, @PatchMapping, and @DeleteMapping--for our example application.

The model in Spring MVC

Za našu ćemo aplikaciju definirati jednostavan objekt modela, a Widget, pohraniti ga u ugrađenu H2 bazu podataka i izgraditi kontroler za upravljanje widgetima. Počnimo s Widgetrazredom, koji je prikazan na popisu 3.