Programmering

Mastering Spring framework 5, Del 1: Spring MVC

Spring MVC er Spring framework's traditionelle bibliotek til opbygning af Java-webapplikationer. Det er en af ​​de mest populære webrammer til opbygning af fuldt funktionelle Java-webapplikationer og RESTful webtjenester. I denne vejledning får du et overblik over Spring MVC og lærer, hvordan man bygger Java-webapplikationer ved hjælp af Spring Boot, Spring Initializr og Thymeleaf.

download Download koden Hent kildekoden for eksempel applikationer i denne vejledning. Oprettet til JavaWorld af Steven Haines

Spring Boot med Spring Initializr

Vi sporer vores Spring MVC-webapplikation fast ved hjælp af Spring Boot og Spring Initializr. Med input til den type applikation, der skal bygges, bruger Spring Initializr de mest almindelige afhængigheder og standardindstillinger til opsætning og konfiguration af en grundlæggende Spring Boot-applikation. Du kan også tilføje brugerdefinerede afhængigheder, og Spring Initializr inkluderer og administrerer dem, hvilket sikrer versionskompatibilitet med både tredjepartssoftware og Spring. Spring Boot-applikationer kører uafhængige uden at kræve, at du leverer et runtime-miljø.

I dette tilfælde, da vi bygger en webapplikation, inkluderer Spring Boot automatisk og konfigurerer Tomcat som en del af appens kørselstid. Vi kan også tilpasse appen ved at tilføje en H2-databasedriver til vores Maven POM-fil. Spring Boot opretter derefter automatisk en integreret database og Datakilde forekomst i applikationskonteksten. Når afhængighederne er indstillet, giver Spring Boot standardkonfigurationer til applikationen. Selvfølgelig kan vi ændre konfigurationerne, hvis vi ønsker det, men takket være Spring Boot har vi en headstart: en fuldt konfigureret, fungerende applikation lige ud af kassen.

Når vi har valgt og konfigureret vores afhængigheder, videregiver vi disse valg til Spring Initializr, som giver en ZIP-fil, der kan downloades, og som indeholder et basis Spring Boot-projekt.

Fjeder MVC med H2 databasemotor

Vi starter med at oprette en grundlæggende Spring MVC-webapplikation, der fortsætter data til en H2-integreret database.

Trin 1. Opsæt og konfigurer appen

Naviger til Spring Initializr kl start.spring.io og vælg Generer et Maven-projekt med Java og Spring Boot 2.0.X, hvor X er den seneste Spring Boot-version (2.0.3 på tidspunktet for denne skrivning). Sørg for at vælge Spring Boot 2.x, så du kan implementere Spring Web MVC 5. Spring Boot 1.4 og Spring Boot 1.5 implementerer Spring 4.

Indtast et gruppenavn med det format, der matcher din webadresse, f.eks com.geekcap.javaworld, og indtast et artefaktnavn, f.eks spring5mvc-eksempel. Figur 1 viser min konfiguration.

Steven Haines

For at tilføje afhængigheder til webappen kan du enten indtaste en komma-adskilt liste over afhængigheder i Søg efter afhængigheder tekstfelt eller klik på Skift til den fulde version. Vi tager den lettere rute ved at klikke på Skift til den fulde version. Afhængighederne er opdelt i grupper, såsom Core, Web og Template Engines. I dette eksempel skal du markere afkrydsningsfelterne for: Web -> Web, skabelonmotorer -> Thymeleaf, SQL -> JPA og SQL -> H2. Her er hvad hvert af disse valg tilføjer til applikationen:

  • Web: Spring MVC og Tomcat
  • Thymeleaf: Thymeleaf webskabelonmotor
  • JPA: Forår JPA, dvale og forårsdata
  • H2: Den indlejrede H2-database

Når du er færdig, skal du klikke på Generer projekt knappen nederst på siden. Spring Initializr opretter en readymade ZIP-fil med alle de krævede projektkilder, som du kan downloade.

Trin 2. Importer Spring Initializr-projektet til din IDE

Uddrag ZIP-filen fra Spring Initializr, og importer derefter projektet til din foretrukne IDE. Hvis du f.eks. Vil importere projektet til IntelliJ, skal du vælge Fil -> Nyt projektsom vist i figur 2.

Steven Haines

Trin 3. Opsæt din Maven POM

Gå derefter til Importer projekt fra eksternt modul, vælg Maven, og tryk på Næste. Sørg for at vælge et Java 1.8-projekt-SDK, og tryk derefter på Afslut.

Spring Boot starter-appen

Lad os nu se på startprogrammet til Spring Boot, der hidtil er genereret af vores (minimale) indsats.

For at starte viser liste 1 Maven POM-filen.

Notering 1. Maven pom.xml

   4.0.0 com.geekcap.javaworld spring5mvc-eksempel 0.0.1-SNAPSHOT jar jar5mvc-eksempel Demoprojekt til 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 

Bemærk, at POM-filen bruger en særlig forælder-POM: spring-boot-starter-parent. Vi bruger den overordnede POM til at styre versionerne af alle vores afhængigheder og sikre, at versionerne er kompatible. Opbevaringsstederne i slutningen af ​​POM-filen henviser til foråret øjebliksbillede og milepæl opbevaringssteder. Vi har brug for disse, fordi Spring Boot 2.x stadig er en milepælsudgivelse på tidspunktet for denne skrivning.

Afhængighederne er ret minimale, og de fleste er forordede med spring-boot-starter:

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

Hver af disse startafhængigheder bringer alle de underafhængigheder, den har brug for, ind. Figur 3 viser den delvist udvidede afhængighedsvisning i IntelliJ.

Steven Haines

POM-filen indeholder følgende afhængigheder:

  • spring-boot-starter-data-jpa inkluderer dvale- og forårsdata.
  • spring-boot-starter-thymeleaf inkluderer Thymeleaf-skabelonmotoren.
  • spring-boot-starter-web inkluderer spring-boot-starter-tomcat, en integreret version af Apache Tomcat.
  • spring-boot-starter-json inkluderer Jackson JSON-bibliotekerne.
  • spring-web og spring-webmvc inkluderer Spring MVC.
  • spring-boot-starter-test inkluderer testbiblioteker som JUnit og Mockito.

Når Spring Boot ser disse afhængigheder i CLASSPATH, starter den automatisk konfiguration. For eksempel når den finder spring-boot-starter-web, opretter den en integreret version af Tomcat, og når den finder H2 og spring-boot-starter-jpa det opretter en H2-integreret database og en dvale EntityManager. Det kabler derefter kablet EntityManager ind i Spring Data.

Spring Boot opretter også en enkelt klasse, der kan bruges til at køre applikationen. Klassen til applikationseksemplet vises i liste 2.

Notering 2. Spring5mvcExampleApplication.java

 pakke com.geekcap.javaworld.spring5mvceeksempel; 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); }} 

Denne klasse udnytter SpringApplication.run () metode, passerer i klassen for at køre (Spring5mvcExampleApplication i dette eksempel). Det @SpringBootApplication kommentar inkluderer følgende kommentarer:

  • @Konfiguration oplyser foråret, at Spring5mvcExampleApplication klasse indeholder konfigurationsoplysninger. (Denne kommentar kan bruges til at oprette bønner, der bliver registreret med Spring-sammenhængen.)
  • @EnableAutoConfiguration fortæller Spring om automatisk at konfigurere ressourcer fra afhængigheder, der findes i CLASSPATH, såsom H2 og Tomcat.
  • @ComponentScan beder Spring om at scanne pakker i CLASSPATH under den aktuelle pakke (com.geekcap.javaworld.spring5mvceeksempel) til fjederkommenterede komponenter som f.eks @Service og @Kontrol.

Spring scanner CLASSPATH og opretter automatisk komponenter såsom den integrerede Tomcat-server og H2-database. Derefter udfyldes foråret-sammenhængen med de applikationskomponenter, der findes i pakkescanningen. I det væsentlige gør Spring Boot det meget nemt at vælge og konfigurere de tjenester, komponenter, controllere, enheder osv., Som du har brug for til din applikation. Når du har gjort det, finder Spring dem automatisk, gør dem tilgængelige i Spring-sammenhæng og autowire alt sammen.

Vi har vores Spring Boot startprojekt opsætning og klar til at gå. I det næste afsnit opretter vi Spring MVC-komponenter til vores Java-webapplikation.

Hvad er foråret sammenhæng?

Det Forårssammenhæng er et register over alle tilgængelige springbønner. Klasser identificeres som springbønner ved at kommentere dem med specifikke Spring-kommentarer. Eksempler inkluderer @Service, der identificerer en forretningstjeneste, @Kontrol, der identificerer en Spring MVC-controller (dvs. håndterer webanmodninger), og @Enhed, som er en JPA-kommentar, der bruges til at identificere klasser, der er kortlagt til databasetabeller.

Når disse bønner er kommenteret, skal de registreres med Spring-konteksten, hvilket Spring Boot gør ved at udføre en pakkescanning af alle klasser i pakker i dit projekt. Når Spring-konteksten bygges, implementerer den inversion-of-control (IoC) designmønsteret gennem afhængighedsinjektion: når en Springbønne har brug for en afhængighed, såsom en tjeneste eller et arkiv, kan bønnen enten definere en konstruktør, der accepterer afhængig bønne eller den kan udnytte @Autowired kommentar for at fortælle Spring, at den har brug for den afhængighed. Spring løser alle afhængigheder og "autowires" applikationen sammen.

Afhængighedsinjektion er et kraftigt designmønster, fordi du i stedet for at oprette og administrere afhængigheder inde i din kode - som kan være rodet og fører til tæt koblede klasser - i stedet kan delegere kontrol til Spring-containeren. Din klasse fortæller simpelthen containeren, hvilke afhængigheder den har brug for at køre, og containeren giver de relevante afhængigheder til din klasse ved kørsel.

Om Spring MVC 5

Spring MVC implementerer det populære Model-View-Controller-mønster, som du sandsynligvis har set i andre webrammer. Model-View-Controller-mønsteret adskiller bekymringer i tre kategorier:

  • Model repræsenterer dine domæneobjekter.
  • Udsigt gengiver din model til en visning, f.eks. til en HTML-side.
  • Controller sidder mellem din visning og model og oversætter ændringsanmodninger i visningen til ændringer i modellen og omvendt. Rent praktisk accepterer controlleren indgående anmodninger, opdaterer potentielt modellen og sender dine modelobjekter til en "visning" for at gengive dem tilbage til klienten.

I Spring MVC identificeres controllere af @Kontrol kommentar og ledsaget af en @RequestMapping kommentar. Annotationen definerer HTTP-verbet (standard HTTP-kommandoer som GET, POST, PUT og DELETE) og URI, for hvilken anmodningstilknytningsmetoden skal anvendes. Forår 4 introducerede kortlægning af genvejsanmodninger, hvilket gør tingene endnu lettere. Vi bruger disse kortlægninger--@GetMapping, @PostMapping, @PutMapping, @PatchMappingog @DeleteMapping- til vores eksempelapplikation.

Modellen i Spring MVC

For vores applikation definerer vi et simpelt modelobjekt, a Widget, gem det i en indbygget H2-database, og opret en controller til at styre widgets. Lad os starte med Widget klasse, som er vist i liste 3.