Programmering

Mastering Spring framework 5, Part 1: Spring MVC

Spring MVC er Spring framework's tradisjonelle bibliotek for å bygge Java-webapplikasjoner. Det er en av de mest populære web-rammene for å bygge fullt funksjonelle Java-webapplikasjoner og RESTful web-tjenester. I denne veiledningen får du en oversikt over Spring MVC og lærer hvordan du bygger Java-webapplikasjoner ved hjelp av Spring Boot, Spring Initializr og Thymeleaf.

last ned Last ned koden Få kildekoden for eksempel applikasjoner i denne veiledningen. Laget for JavaWorld av Steven Haines

Spring Boot med Spring Initializr

Vi sporer vår MVC-webapplikasjon med hjelp av Spring Boot og Spring Initializr. Gitt input for typen applikasjon som skal bygges, bruker Spring Initializr de vanligste avhengighetene og standardinnstillingene for å sette opp og konfigurere et grunnleggende Spring Boot-program. Du kan også legge til tilpassede avhengigheter, og Spring Initializr vil inkludere og administrere dem, og sikre versjonskompatibilitet med både tredjepartsprogramvare og Spring. Spring Boot-applikasjoner kjører frittstående, uten at du må oppgi et kjøretidsmiljø.

I dette tilfellet, siden vi bygger en webapplikasjon, vil Spring Boot automatisk inkludere og konfigurere Tomcat som en del av appens kjøretid. Vi kan også tilpasse appen ved å legge til en H2-databasedriver i Maven POM-filen. Spring Boot vil da automatisk opprette en innebygd database og Datakilde forekomst i applikasjonssammenheng. Når avhengighetene er angitt, vil Spring Boot gi standardkonfigurasjoner for applikasjonen. Selvfølgelig kan vi endre konfigurasjonene hvis vi vil, men takket være Spring Boot har vi en headstart: et fullt konfigurert, fungerende program rett ut av esken.

Når vi har valgt og konfigurert våre avhengigheter, vil vi overføre disse valgene til Spring Initializr, som vil gi en nedlastbar ZIP-fil som inneholder et grunnleggende Spring Boot-prosjekt.

Fjær MVC med H2 databasemotor

Vi starter med å lage en grunnleggende Spring MVC-webapplikasjon som viderefører data til en H2-innebygd database.

Trinn 1. Konfigurer og konfigurer appen

Naviger til Spring Initializr kl start.spring.io og velg Generer et Maven-prosjekt med Java og Spring Boot 2.0.X, der X er den siste Spring Boot-versjonen (2.0.3 i skrivende stund). Forsikre deg om at du velger Spring Boot 2.x slik at du kan implementere Spring Web MVC 5. Spring Boot 1.4 og Spring Boot 1.5 implementerer Spring 4.

Skriv inn et gruppenavn med formatet som samsvarer med nettadressen din, for eksempel com.geekcap.javaworld, og skriv inn et gjenstandsnavn, for eksempel spring5mvc-eksempel. Figur 1 viser konfigurasjonen min.

Steven Haines

Hvis du vil legge til avhengigheter i webappen, kan du enten legge inn en kommaadskilt liste over avhengigheter i Søk etter avhengigheter tekstfelt eller klikk på Bytt til fullversjonen. Vi tar den enklere ruten ved å klikke på Bytt til fullversjonen. Avhengighetene er delt inn i grupper, for eksempel Core, Web og Template Engines. I dette eksemplet merker du av for: Nett -> Nett, malmotorer -> Thymeleaf, SQL -> JPA og SQL -> H2. Her er hva hvert av disse valgene vil legge til i applikasjonen:

  • Nett: Spring MVC og Tomcat
  • Thymeleaf: Thymeleaf webmalmotor
  • JPA: Spring JPA, Hibernate, and Spring Data
  • H2: Den innebygde H2-databasen

Når du er ferdig, klikker du på Generer prosjekt -knappen nederst på siden. Spring Initializr oppretter en ferdiglagd ZIP-fil med alle nødvendige prosjektkilder, som du kan laste ned.

Trinn 2. Importer Spring Initializr-prosjektet til IDE

Pakk ut ZIP-filen fra Spring Initializr, og importer deretter prosjektet til din favoritt IDE. Hvis du for eksempel vil importere prosjektet til IntelliJ, velger du Fil -> Nytt prosjekt, som vist i figur 2.

Steven Haines

Trinn 3. Konfigurer Maven POM

Gå deretter til Importer prosjekt fra ekstern modul, velg Maven, og trykk Neste. Sørg for å velge et Java 1.8-prosjekt SDK, og trykk deretter Bli ferdig.

Spring Boot starter-appen

La oss ta en titt på vårstartprogrammet Spring Boot som har blitt generert av vår (minimale) innsats så langt.

For å starte viser oppføring 1 Maven POM-filen.

Oppføring 1. Maven pom.xml

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

Legg merke til at POM-filen bruker en spesiell overordnet POM: spring-boot-starter-parent. Vi bruker den overordnede POM til å administrere versjoner av alle våre avhengigheter og sikre at versjoner er kompatible. Depotene på slutten av POM-filen refererer til våren øyeblikksbilde og milepæl repositories. Vi trenger disse fordi Spring Boot 2.x fremdeles er en milepælutgivelse i skrivende stund.

Avhengighetene er ganske minimale, og de fleste er innledet med spring-boot-starter:

  • spring-boot-starter-data-jpa
  • spring-boot-starter-thymeleaf
  • spring-boot-starter-web
  • vår-støvel-start-test

Hver av disse startavhengighetene bringer inn alle underavhengighetene de trenger. Figur 3 viser den delvis utvidede avhengighetsvisningen i IntelliJ.

Steven Haines

POM-filen inneholder følgende avhengigheter:

  • spring-boot-starter-data-jpa inkluderer dvalemodus og vårdata.
  • spring-boot-starter-thymeleaf inkluderer Thymeleaf malmotoren.
  • spring-boot-starter-web inkluderer spring-boot-starter-tomcat, en innebygd versjon av Apache Tomcat.
  • spring-boot-starter-json inkluderer Jackson JSON-bibliotekene.
  • vår-web og vår-webmvc inkluderer Spring MVC.
  • vår-støvel-start-test inkluderer testbiblioteker som JUnit og Mockito.

Når Spring Boot ser disse avhengighetene i CLASSPATH, starter den automatisk konfigurasjon. For eksempel når den finner spring-boot-starter-web, oppretter den en innebygd versjon av Tomcat, og når den finner H2 og spring-boot-starter-jpa det skaper en H2-innebygd database og en dvalemodus EntityManager. Den kabler deretter EntityManager inn i vårdata.

Spring Boot oppretter også en enkelt klasse som kan brukes til å kjøre applikasjonen. Klassen for eksempelapplikasjonen vises i Oppføring 2.

Oppføring 2. Spring5mvcExampleApplication.java

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

Denne klassen utnytter SpringApplication.run () metode, passerer i klassen for å kjøre (Spring5mvcExampleApplication i dette eksemplet). De @SpringBootApplication merknader inkluderer følgende merknader:

  • @Konfigurasjon opplyser våren at Spring5mvcExampleApplication klasse inneholder konfigurasjonsinformasjon. (Denne merknaden kan brukes til å lage bønner som blir registrert med vårkonteksten.)
  • @EnableAutoConfiguration forteller Spring om å automatisk konfigurere ressurser fra avhengigheter som finnes i CLASSPATH, for eksempel H2 og Tomcat.
  • @ComponentScan ber Spring om å skanne pakker i CLASSPATH under den nåværende pakken (com.geekcap.javaworld.spring5mvceeksempel) for fjærkommenterte komponenter som f.eks @Service og @Kontrollør.

Spring skanner CLASSPATH og oppretter automatisk komponenter som den innebygde Tomcat-serveren og H2-databasen. Deretter fylles vårkonteksten med applikasjonskomponentene som finnes i pakkeskanningen. I hovedsak gjør Spring Boot det veldig enkelt å velge og konfigurere tjenester, komponenter, kontrollere, enheter og så videre som du trenger for applikasjonen din. Når du har gjort det, vil Spring automatisk finne dem, gjøre dem tilgjengelige i vårkonteksten og autowire alt sammen.

Vi har vår Spring Boot startprosjektoppsett og klar til å gå. I neste avsnitt oppretter vi Spring MVC-komponenter for Java-webapplikasjonen.

Hva er vårkonteksten?

De Vårkontekst er et register over alle tilgjengelige vårbønner. Klassene identifiseres som vårbønner ved å kommentere dem med spesifikke vårkommentarer. Eksempler inkluderer @Service, som identifiserer en forretningstjeneste, @Kontrollør, som identifiserer en Spring MVC-kontroller (dvs. håndterer nettforespørsler), og @Enhet, som er en JPA-kommentar som brukes til å identifisere klasser som er kartlagt til databasetabeller.

Når disse bønnene er merket, må de registreres i vårkonteksten, som Spring Boot gjør ved å utføre en pakkeskanning av alle klasser i pakker i prosjektet ditt. Når vårkonteksten bygges, implementerer den inversjon av kontroll (IoC) designmønsteret gjennom avhengighetsinjeksjon: når en vårbønne trenger en avhengighet, for eksempel en tjeneste eller et lager, kan bønnen enten definere en konstruktør som godtar avhengig bønne eller den kan utnytte @Autowired kommentar for å fortelle våren at den trenger den avhengigheten. Spring løser alle avhengigheter og "autowires" applikasjonen sammen.

Avhengighetsinjeksjon er et kraftig designmønster fordi, i stedet for å opprette og administrere avhengigheter i koden din - som kan være rotete og fører til tett sammenkoblede klasser - kan du i stedet delegere kontrollen til vårbeholderen. Klassen din forteller bare beholderen hvilke avhengigheter den trenger for å kjøre, og beholderen gir de aktuelle avhengighetene til klassen din ved kjøretid.

Om våren MVC 5

Spring MVC implementerer det populære Model-View-Controller-mønsteret, som du sannsynligvis har sett i andre nettrammer. Model-View-Controller-mønsteret skiller bekymringer i tre kategorier:

  • Modell representerer domeneobjektene dine.
  • Utsikt gjengir modellen din til en visning, for eksempel til en HTML-side.
  • Kontroller sitter mellom visningen og modellen og oversetter endringsforespørsler i visningen til endringer i modellen, og omvendt. Rent praktisk godtar kontrolleren innkommende forespørsler, oppdaterer potensielt modellen og sender modellobjektene dine til en "visning" for å gjengi tilbake til klienten.

I vår MVC identifiseres kontrollere av @Kontrollør kommentar og ledsaget av en @RequestMapping kommentar. Merknaden definerer HTTP-verbet (standard HTTP-kommandoer som GET, POST, PUT og DELETE) og URI som metoden for forespørselskartlegging vil bli brukt for. Vår 4 introduserte kartlegginger av snarveisforespørsler, som gjør ting enda enklere. Vi bruker disse tilordningene--@GetMapping, @PostMapping, @PutMapping, @PatchMapping, og @DeleteMapping- for vårt eksempel på søknad.

Modellen i vår MVC

For vår applikasjon vil vi definere et enkelt modellobjekt, a Widget, lagre den i en innebygd H2-database, og bygg en kontroller for å administrere widgets. La oss starte med Widget klasse, som er vist i Listing 3.

$config[zx-auto] not found$config[zx-overlay] not found