Προγραμματισμός

Mastering Spring framework 5, Μέρος 1: Spring MVC

Το Spring MVC είναι η παραδοσιακή βιβλιοθήκη του πλαισίου Spring για την κατασκευή εφαρμογών Ιστού Java. Είναι ένα από τα πιο δημοφιλή πλαίσια Ιστού για την κατασκευή πλήρως λειτουργικών εφαρμογών Ιστού Java και υπηρεσιών RESTful web. Σε αυτό το σεμινάριο, θα λάβετε μια επισκόπηση του Spring MVC και θα μάθετε πώς να δημιουργείτε εφαρμογές Ιστού Java χρησιμοποιώντας το Spring Boot, το Spring Initializr και το Thymeleaf.

λήψη Λήψη του κώδικα Λάβετε τον πηγαίο κώδικα για παράδειγμα εφαρμογές σε αυτό το σεμινάριο. Δημιουργήθηκε για το JavaWorld από τον Steven Haines

Spring Boot με Spring Initializr

Θα ανοίξουμε γρήγορα την εφαρμογή ιστού Spring MVC με τη βοήθεια των Spring Boot και Spring Initializr. Δεδομένης της εισόδου για τον τύπο της εφαρμογής που θα κατασκευαστεί, το Spring Initializr χρησιμοποιεί τις πιο κοινές εξαρτήσεις και προεπιλογές για τη ρύθμιση και τη διαμόρφωση μιας βασικής εφαρμογής Spring Boot. Μπορείτε επίσης να προσθέσετε προσαρμοσμένες εξαρτήσεις και το Spring Initializr θα τα συμπεριλάβει και θα τα διαχειριστεί, διασφαλίζοντας τη συμβατότητα της έκδοσης με λογισμικό τρίτων κατασκευαστών και το Spring. Οι εφαρμογές Spring Boot εκτελούνται αυτόνομες, χωρίς να απαιτείται η παροχή περιβάλλοντος εκτέλεσης.

Σε αυτήν την περίπτωση, καθώς δημιουργούμε μια εφαρμογή ιστού, το Spring Boot θα περιλαμβάνει και θα ρυθμίζει αυτόματα το Tomcat ως μέρος του χρόνου εκτέλεσης της εφαρμογής. Μπορούμε επίσης να προσαρμόσουμε την εφαρμογή προσθέτοντας ένα πρόγραμμα οδήγησης βάσης δεδομένων H2 στο αρχείο Maven POM. Στη συνέχεια, το Spring Boot θα δημιουργήσει αυτόματα μια ενσωματωμένη βάση δεδομένων και Πηγή δεδομένων παρουσία στο πλαίσιο της εφαρμογής. Μόλις οριστούν οι εξαρτήσεις, το Spring Boot θα παρέχει προεπιλεγμένες διαμορφώσεις για την εφαρμογή. Φυσικά μπορούμε να αλλάξουμε τις διαμορφώσεις αν θέλουμε, αλλά χάρη στο Spring Boot έχουμε ένα πρώτο βήμα: μια πλήρως διαμορφωμένη, λειτουργούσα εφαρμογή απευθείας από το κουτί.

Μόλις επιλέξουμε και διαμορφώσουμε τις εξαρτήσεις μας, θα περάσουμε αυτές τις επιλογές στο Spring Initializr, το οποίο θα παρέχει ένα αρχείο ZIP με δυνατότητα λήψης που περιέχει ένα βασικό έργο Spring Boot.

Άνοιξη MVC με κινητήρα βάσης δεδομένων H2

Θα ξεκινήσουμε δημιουργώντας μια βασική εφαρμογή ιστού Spring MVC που διατηρεί δεδομένα σε μια ενσωματωμένη βάση δεδομένων H2.

Βήμα 1. Ρύθμιση και διαμόρφωση της εφαρμογής

Μεταβείτε στο Spring Initializr στη διεύθυνση start.spring.io και επιλέξτε Δημιουργήστε ένα έργο Maven με Java και Spring Boot 2.0.X, όπου το X είναι η πιο πρόσφατη έκδοση Spring Boot (2.0.3 τη στιγμή αυτής της γραφής). Βεβαιωθείτε ότι έχετε επιλέξει Spring Boot 2.x ώστε να μπορείτε να εφαρμόσετε το Spring Web MVC 5. Spring Boot 1.4 και Spring Boot 1.5 θα εφαρμόσετε το Spring 4.

Εισαγάγετε ένα όνομα ομάδας με τη μορφή που ταιριάζει με τη διεύθυνση ιστού σας, όπως com.geekcap.javaworldκαι εισαγάγετε ένα όνομα τεχνουργήματος, όπως spring5mvc-παράδειγμα. Το σχήμα 1 δείχνει τη διαμόρφωσή μου.

Στίβεν Χάινς

Για να προσθέσετε εξαρτήσεις στην εφαρμογή ιστού, μπορείτε είτε να εισαγάγετε μια λίστα εξαρτήσεων διαχωρισμένων με κόμμα στο Αναζήτηση εξαρτήσεων πεδίο κειμένου ή κάντε κλικ στο Μετάβαση στην πλήρη έκδοση. Θα κάνουμε την ευκολότερη διαδρομή κάνοντας κλικ στο Μετάβαση στην πλήρη έκδοση. Οι εξαρτήσεις χωρίζονται σε ομάδες, όπως Core, Web και Template Engines. Για αυτό το παράδειγμα, επιλέξτε τα πλαίσια ελέγχου για: Ιστός -> Ιστός, Μηχανές προτύπων -> Thymeleaf, SQL -> JPA και SQL -> H2. Δείτε τι θα προσθέσει κάθε μία από αυτές τις επιλογές στην εφαρμογή:

  • Ιστός: Spring MVC και Tomcat
  • Thymeleaf: Μηχανή προτύπου web Thymeleaf
  • JPA: Spring JPA, Hibernate και Spring Data
  • H2: Η ενσωματωμένη βάση δεδομένων H2

Όταν τελειώσετε, κάντε κλικ στο Δημιουργία έργου κουμπί στο κάτω μέρος της σελίδας. Το Spring Initializr θα δημιουργήσει ένα έτοιμο αρχείο ZIP με όλες τις απαιτούμενες πηγές έργου, τις οποίες μπορείτε να κατεβάσετε.

Βήμα 2. Εισαγάγετε το έργο Spring Initializr στο IDE σας

Εξαγάγετε το αρχείο ZIP από το Spring Initializr και, στη συνέχεια, εισαγάγετε το έργο στο αγαπημένο σας IDE. Για παράδειγμα, για να εισαγάγετε το έργο στο IntelliJ, επιλέξτε Αρχείο -> Νέο έργο, όπως φαίνεται στο σχήμα 2.

Στίβεν Χάινς

Βήμα 3. Ρυθμίστε το Maven POM

Στη συνέχεια, μεταβείτε στο Εισαγωγή έργου από εξωτερική μονάδα, επιλέξτε Μέβενκαι πατήστε Επόμενο. Φροντίστε να επιλέξετε ένα SDK έργου Java 1.8 και, στη συνέχεια, πατήστε Φινίρισμα.

Η εφαρμογή εκκίνησης Spring Boot

Τώρα ας ρίξουμε μια ματιά στην εφαρμογή εκκίνησης Spring Boot που έχει δημιουργηθεί από τις (ελάχιστες) προσπάθειές μας μέχρι στιγμής.

Για να ξεκινήσετε, η Λίστα 1 εμφανίζει το αρχείο Maven POM.

Λίστα 1. Maven pom.xml

   4.0.0 com.geekcap.javaworld spring5mvc-παράδειγμα 0.0.1-SNAPSHOT βάζο spring5mvc-παράδειγμα Επίδειξη έργου για Spring Boot .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 

Σημειώστε ότι το αρχείο POM χρησιμοποιεί ένα ειδικό γονικό POM: spring-boot-starter-γονέας. Θα χρησιμοποιήσουμε το γονικό POM για να διαχειριστούμε τις εκδόσεις όλων των εξαρτήσεων μας και να διασφαλίσουμε ότι οι εκδόσεις είναι συμβατές. Τα αποθετήρια στο τέλος του αρχείου POM αναφέρονται στην άνοιξη στιγμιότυπο και ορόσημο αποθετήρια. Τα χρειαζόμαστε γιατί το Spring Boot 2.x εξακολουθεί να είναι ένα ορόσημο που κυκλοφόρησε τη στιγμή αυτής της γραφής.

Οι εξαρτήσεις είναι αρκετά ελάχιστες και οι περισσότερες είναι προκαταρκτικές ελατήριο-μπότα-μίζα:

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

Κάθε μία από αυτές τις εξαρτήσεις εκκίνησης φέρνει όλες τις υπο-εξαρτήσεις που χρειάζεται. Το Σχήμα 3 δείχνει την εν μέρει εκτεταμένη προβολή εξάρτησης στο IntelliJ.

Στίβεν Χάινς

Το αρχείο POM περιλαμβάνει τις ακόλουθες εξαρτήσεις:

  • spring-boot-starter-data-jpa περιλαμβάνει δεδομένα αδρανοποίησης και άνοιξη.
  • spring-boot-starter-thymeleaf περιλαμβάνει τη μηχανή προτύπου Thymeleaf.
  • spring-boot-starter-web περιλαμβάνει ελατήριο-μπότα-εκκινητής-ντομάτα, μια ενσωματωμένη έκδοση του Apache Tomcat.
  • spring-boot-starter-json περιλαμβάνει τις βιβλιοθήκες Jackson JSON.
  • spring-web και spring-webmvc περιλαμβάνει Spring MVC.
  • spring-boot-starter-test περιλαμβάνει δοκιμές βιβλιοθηκών όπως JUnit και Mockito.

Όταν το Spring Boot βλέπει αυτές τις εξαρτήσεις στο CLASSPATH, ξεκινά την αυτόματη διαμόρφωση. Για παράδειγμα, όταν το βρίσκει spring-boot-starter-web, δημιουργεί μια ενσωματωμένη έκδοση του Tomcat και όταν βρίσκει H2 και spring-boot-starter-jpa δημιουργεί μια ενσωματωμένη βάση δεδομένων H2 και μια αδρανοποίηση EntityManager. Στη συνέχεια καλωδιώνει το EntityManager στα Spring Data.

Το Spring Boot δημιουργεί επίσης μία κλάση που μπορεί να χρησιμοποιηθεί για την εκτέλεση της εφαρμογής. Η κλάση για την εφαρμογή παραδείγματος εμφανίζεται στη Λίστα 2.

Λίστα 2. Spring5mvcExampleApplication.java

 πακέτο com.geekcap.javaworld.spring5mvcexample; εισαγωγή org.springframework.boot.SpringApplication; εισαγωγή org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication δημόσια τάξη Spring5mvcExampleApplication {public static void main (String [] args) {SpringApplication.run (Spring5mvcExampleApplication.class, args); }} 

Αυτή η τάξη αξιοποιεί το SpringApplication.run () μέθοδο, περνώντας στην τάξη για εκτέλεση (Εφαρμογή Spring5mvcExample σε αυτό το παράδειγμα). ο @SpringBootApplication Ο σχολιασμός περιλαμβάνει τους ακόλουθους σχολιασμούς:

  • @Διαμόρφωση ενημερώνει την άνοιξη ότι το Εφαρμογή Spring5mvcExample κλάση περιέχει πληροφορίες διαμόρφωσης. (Αυτός ο σχολιασμός μπορεί να χρησιμοποιηθεί για τη δημιουργία φασολιών που θα εγγραφούν στο πλαίσιο της Άνοιξης.)
  • @EnableAutoConfiguration λέει στο Spring να ρυθμίζει αυτόματα πόρους από εξαρτήσεις που βρίσκονται στο CLASSPATH, όπως το H2 και το Tomcat.
  • @ComponentScan λέει στο Spring να σαρώσει πακέτα στο CLASSPATH κάτω από το τρέχον πακέτο (com.geekcap.javaworld.spring5mvcexample) για εξαρτήματα σχολιασμένα με ελατήρια όπως @Υπηρεσία και @Ελεγκτής.

Το Spring σαρώνει το CLASSPATH και δημιουργεί αυτόματα στοιχεία όπως ο ενσωματωμένος διακομιστής Tomcat και η βάση δεδομένων H2. Στη συνέχεια συμπληρώνει το πλαίσιο Spring με τα στοιχεία εφαρμογής που βρίσκονται στη σάρωση πακέτων. Στην ουσία, το Spring Boot διευκολύνει την επιλογή και διαμόρφωση των υπηρεσιών, των στοιχείων, των ελεγκτών, των οντοτήτων και ούτω καθεξής που χρειάζεστε για την εφαρμογή σας. Μόλις το κάνετε αυτό, η Άνοιξη θα τα βρει αυτόματα, θα τα καταστήσει διαθέσιμα στο πλαίσιο της Άνοιξης και θα τα κάνει αυτόματα όλα μαζί.

Έχουμε την προετοιμασία για το πρόγραμμα εκκίνησης Spring Boot και έτοιμοι να ξεκινήσουμε. Στην επόμενη ενότητα θα δημιουργήσουμε τα στοιχεία Spring MVC για την εφαρμογή ιστού Java.

Τι είναι το πλαίσιο της Άνοιξης;

ο Άνοιξη πλαίσιο είναι ένα μητρώο όλων των διαθέσιμων φασολιών. Τα μαθήματα αναγνωρίζονται ως φασολάκια με σχολιασμό με συγκεκριμένους σχολιασμούς της άνοιξης. Τα παραδείγματα περιλαμβάνουν @Υπηρεσία, που προσδιορίζει μια επιχειρηματική υπηρεσία, @Ελεγκτής, το οποίο προσδιορίζει έναν ελεγκτή Spring MVC (δηλαδή, χειρίζεται αιτήματα ιστού) και @Οντότητα, που είναι ένας σχολιασμός JPA που χρησιμοποιείται για τον προσδιορισμό τάξεων που έχουν αντιστοιχιστεί σε πίνακες βάσης δεδομένων.

Μόλις σχολιαστούν αυτά τα φασόλια, πρέπει να εγγραφούν στο πλαίσιο Spring, το οποίο κάνει το Spring Boot εκτελώντας σάρωση πακέτων όλων των τάξεων σε πακέτα του έργου σας. Καθώς χτίζεται το πλαίσιο Spring, εφαρμόζει το σχέδιο σχεδίασης αντιστροφής του ελέγχου (IoC) μέσω έγχυσης εξάρτησης: όταν ένα φασόλι Spring χρειάζεται μια εξάρτηση, όπως μια υπηρεσία ή ένα αποθετήριο, το φασόλι μπορεί είτε να ορίσει έναν κατασκευαστή που αποδέχεται το εξαρτώμενο φασόλι ή μπορεί να αξιοποιήσει το @ Αυτόματο σχολιασμός για να πει στην Άνοιξη ότι χρειάζεται αυτή την εξάρτηση. Το Spring επιλύει όλες τις εξαρτήσεις και "autowires" την εφαρμογή μαζί.

Το Dependency Injection είναι ένα ισχυρό μοτίβο σχεδίασης γιατί, αντί να δημιουργείτε και να διαχειρίζεστε εξαρτήσεις μέσα στον κώδικά σας - το οποίο μπορεί να είναι ακατάστατο και οδηγεί σε στενά συνδεδεμένες τάξεις - μπορείτε αντ 'αυτού να αναθέσετε τον έλεγχο στο δοχείο Spring. Η τάξη σας λέει απλώς στο κοντέινερ ποιες εξαρτήσεις χρειάζεται για να εκτελεστεί και το κοντέινερ παρέχει τις κατάλληλες εξαρτήσεις στην τάξη σας κατά το χρόνο εκτέλεσης.

Σχετικά με το Spring MVC 5

Το Spring MVC εφαρμόζει το δημοφιλές μοτίβο Model-View-Controller, το οποίο πιθανότατα έχετε δει σε άλλα πλαίσια ιστού. Το πρότυπο Model-View-Controller διαχωρίζει τις ανησυχίες σε τρεις κατηγορίες:

  • Μοντέλο αντιπροσωπεύει τα αντικείμενα του τομέα σας.
  • Θέα αποδίδει το μοντέλο σας σε μια προβολή, όπως σε μια σελίδα HTML.
  • Ελεγκτής βρίσκεται μεταξύ της προβολής και του μοντέλου σας και μεταφράζει τα αιτήματα αλλαγής στην προβολή σε αλλαγές στο μοντέλο και το αντίστροφο. Στην πράξη, ο ελεγκτής αποδέχεται εισερχόμενα αιτήματα, ενδεχομένως ενημερώνει το μοντέλο και στέλνει τα αντικείμενα του μοντέλου σας σε μια «προβολή» για απόδοση στον πελάτη.

Στην άνοιξη MVC, οι ελεγκτές αναγνωρίζονται από το @Ελεγκτής σχολιασμός και συνοδεύεται από α @RequestMapping σχόλιο. Ο σχολιασμός ορίζει το ρήμα HTTP (τυπικές εντολές HTTP όπως GET, POST, PUT και DELETE) και URI για τα οποία θα εφαρμοστεί η μέθοδος αντιστοίχισης αιτήσεων. Το Spring 4 παρουσίασε αντιστοιχίσεις αιτήσεων συντόμευσης, οι οποίες κάνουν τα πράγματα ακόμα πιο εύκολα. Θα χρησιμοποιήσουμε αυτές τις αντιστοιχίσεις--@GetMapping, @PostMapping, @PutMapping, @PatchMapping, και @DeleteMapping--για την εφαρμογή του παραδείγματος.

Το μοντέλο στο Spring MVC

Για την εφαρμογή μας, θα ορίσουμε ένα απλό μοντέλο αντικειμένου, α Widget, αποθηκεύστε το σε μια ενσωματωμένη βάση δεδομένων H2 και δημιουργήστε έναν ελεγκτή για τη διαχείριση widget. Ας ξεκινήσουμε με το Widget τάξη, η οποία εμφανίζεται στην καταχώριση 3.