Vorbereitung auf die Spring Professional-Zertifizierung. Fragen zu Spring MVC

Grüße an alle.


Dies ist der fünfte Artikel in einer Reihe von Schulungsartikeln mit Spring Professional-Zertifizierung.


Inhaltsverzeichnis
  1. Abhängigkeitsinjektion, Container, IoC, Bohnen
  2. AOP (aspektorientierte Programmierung)
  3. JDBC, Transaktionen, JPA, Federdaten
  4. Frühlingsstiefel
  5. Frühling mvc
  6. Frühlingssicherheit
  7. RUHE
  8. Testen

Ich möchte Sie daran erinnern, dass diese Artikel Antworten auf Fragen aus dem offiziellen Leitfaden von Pivotal zur Vorbereitung auf die Zertifizierung sind.





MVC ist eine Abkürzung für ein spezielles Muster. Was ist dieses Muster und wofür ist es?

MVC ist eine spezielle Vorlage. Er unterteilt das Programm in drei Arten von Komponenten:


  • Modell - Das Modell ist für die Datenspeicherung verantwortlich.
  • Ansicht - ist für die Datenausgabe im Frontend verantwortlich.
  • Controller - ist für den Datenaustausch mit der Ansicht verantwortlich. Er arbeitet mit Modellen.


Was ist ein DispatcherServlet und wo wird es verwendet?

Dies ist einer der Hauptteile von MVC für den Datenaustausch. Dies ist das Hauptservlet, das Anforderungen zwischen regulären Servlets verteilt.


  • Es empfängt Anforderungen und sendet sie an registrierte Handler.
  • Behandelt Ansichten, indem ihre Namen mit ViewResolver-Objekten abgeglichen werden
  • Behandelt ausgelöste Ausnahmen


Was ist der Lebenszyklus einer Anfrage?
  1. Die Anfrage kommt in DispatcherServlet
  2. DispatcherServlet sendet eine Anfrage basierend auf der URL der Anfrage an einen der Controller
  3. Der Controller verarbeitet die Anforderung, delegiert die Ausführung der Geschäftslogik an die Geschäftsschicht (normalerweise sind dies Klassen mit @Service Annotation) und erstellt ein Modell mit Daten, das er an DispatcherServlet @Service
  4. DispatcherServlet sendet das Modell basierend auf der ViewResolver-Oberfläche zur Ansicht an die Vorderseite (mehr dazu weiter unten).

Wie erfolgt die Erstellung von DispatcherServlet?

DS wird vor dem Erstellen des ApplicationContext erstellt.
Ab Spring 3.2 wird eine Implementierung der WebApplicationInitializer-Schnittstelle namens AbstractAnnotationConfigDispatcherServletInitialize verwendet.


AbstractAnnotationConfigDispatcherServletInitializer erstellt sowohl DispatcherServlet als auch ContextLoaderListener.


Es gibt zwei Möglichkeiten, DS zu konfigurieren:


  • Durch Definieren spezieller Eigenschaften in web.xml
  • Überschreiben von AbstractAnnotationConfigDispatcherServletInitializer

Was ist ein WebApplicationContext? Welche zusätzlichen Bereiche bringt er mit?

Dies ist ein spezieller Kontext für eine Webanwendung.
Es verfügt über alle Funktionen eines regulären ApplicationConext (weil es davon erbt), aber auch über Methoden für die Standard-Servlet-API.


Hinweis: Geltungsbereich ist der Geltungsbereich.


GeltungsbereichBeschreibung
RequestUmfang - 1 HTTP-Anforderung. Für jede Anforderung wird eine neue Bean erstellt.
SessionUmfang - 1 Sitzung. Für jede Sitzung wird eine neue Bean erstellt.
ApplicationGültigkeitsbereich - ServletContext-Lebenszyklus
WebSocketGeltungsbereich - WebSocket-Lebenszyklus

Warum Sitzungsumfang verwenden?

Sitzungsbereichs-Bean ist eine Bean, die vorhanden ist, während die Sitzung vorhanden ist. Es kann beim Erstellen eines Warenkorbs in einem Online-Shop usw. verwendet werden.


Was ist der Standardbereich in MVC?

Genau wie im Frühling ohne MVC - Singleton.


Warum die @ Controller-Annotation verwenden?

Die Controller- Annotation wird zum Registrieren von http-Anforderungshandlern verwendet. Dies ist eine Annotation auf Klassenebene, die eine Component- Annotation enthält. Die Controller-Klasse sieht aus wie ein reguläres POJO mit Handler-Methoden und Anmerkungen.


Wie werden eingehende Anforderungen Handler-Methoden zugeordnet?
  1. DispatcherServlet empfängt eine Anfrage
  2. DS enthält eine Liste von Klassen, die die HandlerMapping Schnittstelle implementieren HandlerMapping
  3. Der Handler findet dort die Methode und sendet eine Anfrage in der Controller-Klasse an sie
  4. Die Handler-Methode führt die Anforderung aus

Erzählen Sie uns von der Anmerkung @RequestMapping

Diese Annotation wird hauptsächlich verwendet, um einen URI für eine Controller-Klasse anzugeben. Bisher wurde es von Klassenmethoden verwendet, um den URI, die http-Methode, den Typ der gesendeten Daten usw. anzugeben. In neueren Versionen von Spring wurde es durch Anmerkungen @GetMapping, @PostMapping usw. ersetzt. Jetzt wird es nur verwendet, um den URI der Controller-Klasse anzuzeigen.


Was sind Anmerkungen @GetMapping, @PostMapping, @DeleteMapping und andere?

Dies sind engere Anmerkungen für die Zuordnung von http-Methoden.


  • @GetMapping - Handles erhalten Anfragen
  • @PostMapping - @PostMapping Post-Anfragen
  • @DeleteMapping - @DeleteMapping
  • @PutMapping - @PutMapping Put-Anfragen
  • @PatchMapping - @PatchMapping Patch-Anfragen

Alles, was unten geschrieben steht, ist auch für andere Anmerkungen charakteristisch.


Annotation @GetMapping ist einfach eine Annotation, die @RequestMapping enthält (method = RequestMethod.GET) .
Außerdem können Sie die Handler-Methode optimieren.
Seine Parameter (sie werden in ähnliche @ RequestMapping-Parameter konvertiert):


  • path - URI
  • headers - Überschriften
  • name - Name des Handlers
  • params - Parameter
  • produces - Typ der zurückgegebenen Daten (JSON, XML, Text). Wird in REST verwendet
  • consumes - Art der empfangenen Daten. Wird in REST verwendet


    Standardmäßig nimmt die Annotation den Pfad zur Methode.
    @GetMapping("managers") = @GetMapping(path = "managers")



Warum die Annotation @RequestParam verwenden?

Diese Annotation wird verwendet, damit Handler-Methoden Parameter von einer http-Anforderung abrufen können.


Eine Anfrage mit folgenden Parametern: http://localhost:8080/getByName/name=Ivan .
Der folgende Code fügt die Zeichenfolge Ivan in den Variablennamen ein.


 @GetMapping("getByName") public User getUserByName(@RequestParam("name") String name) { //some logic } 

Warum die Annotation @PathVariable verwenden?

Diese Anmerkung erhält einen bestimmten Teil von der URI.


URI: http://localhost:8080/getById/23


Der folgende Code fügt 23 in die id Variable ein.


 @GetMapping("getById/_{id}_") public User getUserById(@PathVariable("id") String id) { //some logic } 

Welche Parameter können Handlermethoden akzeptieren?

Methoden in der Controller-Klasse können einige Objekttypen als akzeptierte Argumente verwenden. Dann wird Spring sie automatisch implementieren. Zum Beispiel das gewünschte HttpSession-Objekt, Sicherheit usw.


 @GetMapping public User getUserById(HttpSession session) { //some logic //      } 

Welche Objekte können verwendet werden (Englisch)


Welche anderen Anmerkungen können neben Methodenparametern verwendet werden?
  • @MatrixVariable - Gibt an, dass der Parameter einem Name-Wert-Paar aus dem URI zugeordnet werden soll.
  • @RequestHeader - Gibt an, dass der Parameter dem Header der @RequestHeader werden soll.
  • @CookieValue - Gibt an, dass der Parameter Cookies zugeordnet werden soll.
    Der Parameter kann als Cookie- Typ oder als Typ eines Cookie-Werts (String, int usw.) deklariert werden.
  • @ModelAttribute - Gibt an, dass der Parameter einem benannten Modellattribut zugeordnet ist, das zur Ansicht verfügbar ist.
  • @SessionAtribute - Gibt an, dass der Parameter einem Attribut aus der Sitzung zugeordnet ist.

Was ist die @ RequestBody-Annotation?

Es wird verwendet, um anzuzeigen, dass die Methode nicht mit Modellen, sondern mit Daten arbeitet. Das heißt, es sendet JSON, XML, Text usw. Normalerweise wird es implizit in REST-Services verwendet.


Was kann eine Controller-Methode zurückgeben?
Arten von zurückgegebenen Objekten und deren Beschreibung (Englisch)

Was ist eine Ansicht?

Ansicht wird verwendet, um dem Benutzer Anwendungsdaten anzuzeigen.
Spring MVC unterstützt mehrere View-Anbieter (sie werden als Template-Engines bezeichnet) - JSP, JSF, Thymeleaf usw.
Die View-Oberfläche wandelt Objekte in reguläre Servlets um.


Wie wird Ansicht in der Renderphase ausgewählt? Wie wird Ansicht angezeigt?

DispatcherServlet enthält eine Liste spezieller "Mapper" für die Ansicht, die basierend auf der Konfiguration des Servlets Bins enthalten, die die ViewResolver- Schnittstelle implementieren.


Anzeigevorgang anzeigen:


  1. Der Controller gibt die Namensansicht im DispactherServlet zurück
  2. Name wird Namen in ViewResolver
  3. Wenn ein geeigneter ViewResolver , wird die Ansicht zurückgegeben, die beim Rendern verwendet werden soll.
  4. DS übergibt das Modell mit den Daten in der Ansicht und zeigt die Ausgabe an (HTML-Seite).

Was ist ein Modell?

Dies ist ein Klassenobjekt, das die Modellschnittstelle implementiert und eine Sammlung von Schlüssel-Wert-Paaren darstellt.
Der Inhalt des Modells wird verwendet, um Daten in der Ansicht anzuzeigen.
Wenn View beispielsweise Informationen zum Customer Objekt anzeigt, kann es auf Modellschlüssel verweisen, z. B. customerName , customerPhone , und Werte für diese Schlüssel abrufen.
Wertobjekte aus dem Modell können auch Geschäftslogik enthalten.

Source: https://habr.com/ru/post/de470566/


All Articles