Ohjelmointi

Mastering Spring framework 5, Part 1: Spring MVC

Spring MVC on Spring Frameworkin perinteinen kirjasto Java-verkkosovellusten rakentamiseen. Se on yksi suosituimmista verkkokehyksistä täysin toimivien Java-verkkosovellusten ja RESTful-verkkopalvelujen rakentamiseen. Tässä opetusohjelmassa saat yleiskuvan Spring MVC: stä ja opit rakentamaan Java-verkkosovelluksia Spring Boot-, Spring Initializr- ja Thymeleaf-sovelluksilla.

lataa Lataa koodi Hanki lähdekoodi esimerkiksi sovelluksista tässä opetusohjelmassa. Luonut JavaWorldille Steven Haines

Kevätkenkä keväällä Initializr

Kerromme kevään MVC-verkkosovelluksemme Spring Bootin ja Spring Initializrin avulla. Annettaessa rakennettavan sovellustyypin tiedot, Spring Initializr käyttää tavallisimpia riippuvuuksia ja oletuksia perustason Spring Boot -sovelluksen määrittämiseen ja määrittämiseen. Voit myös lisätä mukautettuja riippuvuuksia, ja Spring Initializr sisältää ja hallinnoi niitä varmistaen version yhteensopivuuden sekä kolmannen osapuolen ohjelmistojen että Springin kanssa. Spring Boot -sovellukset toimivat itsenäisesti ilman, että sinun tarvitsee tarjota ajonaikaisia ​​ympäristöjä.

Tässä tapauksessa, koska rakennamme verkkosovellusta, Spring Boot sisällyttää ja määrittelee Tomcatin automaattisesti osana sovelluksen ajonaikaa. Voimme myös mukauttaa sovellusta lisäämällä H2-tietokantaohjaimen Maven POM -tiedostoon. Spring Boot luo sitten upotetun tietokannan ja Tietolähde esimerkiksi sovelluskontekstissa. Kun riippuvuudet on asetettu, Spring Boot tarjoaa oletuskokoonpanot sovellukselle. Tietysti voimme muuttaa kokoonpanoja, jos haluamme, mutta Spring Bootin ansiosta meillä on headstart: täysin konfiguroitu, toimiva sovellus heti laatikosta.

Kun olemme valinneet ja määrittäneet riippuvuutemme, välitämme nämä valinnat Spring Initializr: lle, joka tarjoaa ladattavan ZIP-tiedoston, joka sisältää Spring Boot -perushankkeen.

Kevään MVC H2-tietokantamoottorilla

Aloitetaan luomalla Spring MVC -verkkosovellus, joka säilyttää tiedot H2-upotetussa tietokannassa.

Vaihe 1. Asenna ja määritä sovellus

Siirry kohtaan Spring Initializr osoitteessa start.spring.io ja valitse Luo Maven-projekti Java- ja Spring Boot 2.0.X -käyttöjärjestelmillä, jossa X on viimeisin Spring Boot -versio (2.0.3 tämän kirjoituksen aikaan). Varmista, että valitset Spring Boot 2.x, jotta voit toteuttaa Spring Web MVC 5: n. Spring Boot 1.4 ja Spring Boot 1.5 toteuttavat Spring 4: n.

Kirjoita ryhmän nimi muodossa, joka vastaa verkko-osoitettasi, kuten com.geekcap.javaworldja kirjoita artefaktin nimi, kuten spring5mvc-esimerkki. Kuva 1 esittää kokoonpanoni.

Steven Haines

Voit lisätä riippuvuuksia verkkosovellukseen joko kirjoittamalla pilkuilla erotetun luettelon riippuvuuksista Etsi riippuvuuksia tekstikenttä tai napsauta Vaihda täysversioon. Kuljemme helpommalla reitillä napsauttamalla Vaihda täysversioon. Riippuvuudet on jaettu ryhmiin, kuten ydin-, verkko- ja mallimoottorit. Valitse tässä esimerkissä seuraavat valintaruudut: Verkko -> Web, mallimoottorit -> Thymeleaf, SQL -> JPA ja SQL -> H2. Näin kukin näistä valinnoista lisää sovellukseen:

  • Verkko: Kevään MVC ja Tomcat
  • Thymeleaf: Thymeleaf-verkkomallimoottori
  • JPA: kevään JPA, horrostila ja kevään tiedot
  • H2: H2-upotettu tietokanta

Kun olet valmis, napsauta Luo projekti -painiketta sivun alaosassa. Spring Initializr luo valmiin ZIP-tiedoston, jossa on kaikki tarvittavat projektilähteet, jotka voit ladata.

Vaihe 2. Tuo Spring Initializr -projekti IDE: si

Pura ZIP-tiedosto Spring Initializrista ja tuo projekti sitten suosikki IDE-tiedostoon. Voit esimerkiksi tuoda projektin IntelliJ: ään valitsemalla Tiedosto -> Uusi projekti, kuten kuvassa 2 on esitetty.

Steven Haines

Vaihe 3. Asenna Maven POM

Siirry seuraavaksi kohtaan Tuo projekti ulkoisesta moduulista, valitse Mavenja paina Seuraava. Muista valita Java 1.8 -projektin SDK ja paina sitten Suorittaa loppuun.

Spring Boot -aloitusohjelma

Katsotaan nyt nyt Spring Boot -käynnistyssovellus, joka on luotu tähän mennessä (vähäisillä) ponnisteluillamme.

Aloittaaksesi, Listing 1 näyttää Maven POM -tiedoston.

Listaus 1. Maven pom.xml

   4.0.0 com.geekcap.javaworld spring5mvc-esimerkki 0.0.1-SNAPSHOT jar spring5mvc-example Demo-projekti Spring Bootille 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 ajonaikainen org.springframework.boot spring-boot -starter-test test org.springframework.boot spring-boot-maven-plugin 

Huomaa, että POM-tiedosto käyttää erityistä ylätason POM-tiedostoa: spring-boot-starter-parent. Käytämme ylätason POM-ohjelmaa kaikkien riippuvuuksien versioiden hallintaan ja versioiden yhteensopivuuden varmistamiseen. POM-tiedoston lopussa olevat arkistot viittaavat kevääseen tilannekuva ja virstanpylväs arkistot. Tarvitsemme näitä, koska Spring Boot 2.x on edelleen virstanpylväs julkaisun kirjoittamisen aikaan.

Riippuvuudet ovat melko vähäisiä, ja useimmat niistä ovat etupäässä kevät-käynnistys-käynnistin:

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

Jokainen näistä käynnistysriippuvuuksista tuo kaikki tarvitsemansa aliriippuvuudet. Kuvio 3 esittää osittain laajennettua riippuvuusnäkymää IntelliJ: ssä.

Steven Haines

POM-tiedosto sisältää seuraavat riippuvuudet:

  • spring-boot-starter-data-jpa sisältää horrostilan ja kevään tiedot.
  • spring-boot-starter-timymilehti sisältää Thymeleaf-mallimoottorin.
  • spring-boot-starter-web sisältää kevät-boot-starter-tomcat, upotettu versio Apache Tomcatista.
  • kevät-boot-starter-json sisältää Jackson JSON -kirjastot.
  • kevät-verkko ja kevät-webmvc sisältää kevään MVC.
  • spring-boot-starter-test sisältää kirjastojen, kuten JUnit ja Mockito, testaamisen.

Kun Spring Boot näkee nämä riippuvuudet CLASSPATH: ssa, se käynnistää automaattisen määrityksen. Esimerkiksi kun se löytää spring-boot-starter-web, se luo upotetun version Tomcatista, ja kun se löytää H2: n ja spring-boot-starter-jpa se luo upotetun H2-tietokannan ja horrostilan EntityManager. Sitten johdot EntityManager kevätdataan.

Spring Boot luo myös yhden luokan, jota voidaan käyttää sovelluksen suorittamiseen. Esimerkkisovelluksen luokka näkyy luettelossa 2.

Listaus 2. Spring5mvcExampleApplication.java

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

Tämä luokka hyödyntää SpringApplication.run () menetelmä, kulkee luokassa suoritettavaksi (Kevät5mvcExampleApplication tässä esimerkissä). @SpringBootApplication merkintä sisältää seuraavat merkinnät:

  • @Kokoonpano ilmoittaa Springille, että Kevät5mvcExampleApplication luokka sisältää määritystiedot. (Tätä merkintää voidaan käyttää luomaan pavut, jotka rekisteröidään kevään kontekstiin.)
  • @EnableAutoConfiguration käskee Springin määrittelemään resurssit automaattisesti CLASSPATHista löytyvistä riippuvuuksista, kuten H2 ja Tomcat.
  • @ComponentScan käskee Springin tarkistamaan nykyisen paketin alla olevat CLASSPATH-paketit (com.geekcap.javaworld.spring5mvceexample) jousikommentoiduille komponenteille, kuten @Service ja @Controller.

Spring skannaa CLASSPATHin ja luo automaattisesti komponentit, kuten sulautetun Tomcat-palvelimen ja H2-tietokannan. Sitten se täyttää Spring-kontekstin pakettiskannauksessa löydetyillä sovelluskomponenteilla. Pohjimmiltaan Spring Boot tekee sovelluksellesi tarvittavien palveluiden, komponenttien, ohjainten, entiteettien ja niin edelleen valitsemisen ja määrittämisen erittäin helpoksi. Kun olet tehnyt sen, Spring löytää ne automaattisesti, asettaa ne saataville Spring-kontekstiin ja kirjoittaa kaikki yhteen.

Meillä on Spring Boot -käynnistysprojektimme määritys ja käyttövalmis. Seuraavassa osassa luomme Spring MVC -komponentit Java-verkkosovelluksellemme.

Mikä on kevään konteksti?

Kevään konteksti on kaikkien saatavilla olevien kevätpapujen rekisteri. Luokat tunnistetaan kevätpavuiksi merkitsemällä ne erityisillä kevätmerkinnöillä. Esimerkkejä ovat @Service, joka yksilöi yrityspalvelun, @Controller, joka tunnistaa Spring MVC -ohjaimen (eli käsittelee verkkopyynnöt), ja @Entity, joka on JPA-merkintä, jota käytetään tietokantataulukoihin yhdistettyjen luokkien tunnistamiseen.

Kun nämä pavut on merkitty, ne on rekisteröitävä Spring-kontekstiin, minkä Spring Boot tekee suorittamalla paketin skannauksen kaikista projektisi paketeista. Kun Spring-kontekstia rakennetaan, se toteuttaa kääntämisen hallinnan (IoC) suunnittelumallin riippuvuusinjektiolla: kun Spring-papu tarvitsee riippuvuutta, kuten palvelua tai arkistoa, papu voi joko määrittää rakentajan, joka hyväksyy riippuvainen papu tai se voi hyödyntää @Autowired huomautus kertoa Springille, että se tarvitsee tuon riippuvuuden. Kevät ratkaisee kaikki riippuvuudet ja "syöttää" sovelluksen yhdessä.

Dependency Injection on tehokas suunnittelumalli, koska sen sijaan, että luodaan ja hallitaan riippuvuuksia koodisi sisällä - mikä voi olla sotkuista ja johtaa tiukasti kytkettyihin luokkiin, voit sen sijaan siirtää ohjauksen Spring-kontille. Luokkasi yksinkertaisesti kertoo säilölle, mitä riippuvuuksia sen on suoritettava, ja säilö tarjoaa sopivat riippuvuudet luokallesi ajon aikana.

Tietoja kevään MVC 5: stä

Kevään MVC toteuttaa suositun Model-View-Controller-mallin, jonka olet todennäköisesti nähnyt muissa verkkokehyksissä. Model-View-Controller-malli jakaa huolenaiheet kolmeen luokkaan:

  • Malli edustaa verkkotunnuksesi objekteja.
  • Näytä renderöi mallisi näkymään, kuten HTML-sivulle.
  • Ohjain istuu näkymän ja mallin välissä ja muuntaa näkymän muutospyynnöt mallin muutoksiksi ja päinvastoin. Käytännössä ohjain hyväksyy saapuvat pyynnöt, mahdollisesti päivittää mallin ja lähettää malliobjektisi "näkymään", jotta ne voidaan palauttaa asiakkaalle.

Kevään MVC: ssä ohjaimet tunnistetaan @Controller huomautus ja siihen liitetään a @RequestMapping merkintä. Merkinnässä määritetään HTTP-verbi (vakio-HTTP-komennot, kuten GET, POST, PUT ja DELETE) ja URI, joille pyyntöjen yhdistämistapaa käytetään. Keväällä 4 esiteltiin pikakuvakartoituksia, jotka helpottavat asioita. Käytämme näitä kartoituksia -@GetMapping, @PostMapping, @PutMapping, @PatchMappingja @DeleteMapping--esimerkkisovelluksemme.

Kevään MVC: n malli

Sovelluksellemme määritellään yksinkertainen malliobjekti a Widget, tallenna se upotettuun H2-tietokantaan ja rakenna ohjain widgetien hallintaan. Aloitetaan Widget luokka, joka näkyy luettelossa 3.