Spring-MVC
Warum Spring MVC benötigt wird
Spring MVC unterstützt die Organisation einer Webanwendung durch das Prinzip der Trennung von Verantwortlichkeiten, was die Entwicklung, das Testen und die Wartung des Codes erleichtert. Es stellt ein Framework zur Verfügung, um Webseiten zu erstellen und Benutzeranfragen zu verarbeiten sowie die Integration mit Geschäftslogik und Datenbanken zu ermöglichen.
In unserer Anwendung verwenden wir eine Drei-Schichten-Architektur, um die Logik in separate Module zu unterteilen. Wir haben die Schichten repository, service und controller. Diese Trennung erleichtert die Wartung und das Testen der Anwendung.
Wichtige Annotationen und ihre Rolle
Für jede Schicht gibt es spezifische Annotationen, die für Spring unerlässlich sind, um Komponenten im Application Context automatisch zu erkennen und zu registrieren (was dies bedeutet, wird später erläutert). Dies trägt zur Aufrechterhaltung einer übersichtlicheren Architektur bei und verbessert die Lesbarkeit des Codes.
Annotation der Repository-Schicht
Die @Repository-Annotation kennzeichnet eine Klasse, die mit der Datenbank interagiert. Diese Klassen enthalten in der Regel Methoden zur Durchführung von CRUD-Operationen (Create, Read, Update, Delete).
UserRepository.java
In diesem Beispiel ist UserRepository als Repository gekennzeichnet, wodurch Spring die Behandlung von datenzugriffsbezogenen Ausnahmen übernimmt und es automatisch in die Anwendung integriert.
Service-Layer-Annotation
Die @Service-Annotation wird verwendet, um eine Klasse als Komponente der Geschäftslogik zu kennzeichnen. Diese Klassen enthalten Methoden, die die Geschäftsregeln und Operationen der Anwendung implementieren.
UserService.java
Die @Service Annotation zeigt an, dass diese Klasse die Geschäftslogik der Anwendung enthält und somit leicht in anderen Teilen der Anwendung verwendet werden kann. Dies vereinfacht die Entwicklung, da Sie Instanzen dieser Klasse nicht manuell erstellen müssen — Spring übernimmt das für Sie.
Annotation der Controller-Schicht
Da die Controller-Schicht als Interaktionspunkt zwischen dem Client und unserer Anwendung dient, müssen wir Endpunkte bereitstellen, über die Clients darauf zugreifen können. Dies beinhaltet die Zuordnung bestimmter URLs zu jeweiligen Methoden, sodass Clients direkt mit diesen Methoden interagieren können.
Um dies zu erreichen, muss die Klasse mit @Controller annotiert und eine Methode definiert werden, die als Request Handler fungiert.
Main.java
Die @RequestMapping-Annotation wird verwendet, um HTTP-Anfragen mit bestimmten Methoden im Controller zu verknüpfen. Sie legt fest, auf welche URL-Muster und Anfragetypen (wie GET oder POST) eine Methode reagieren soll. Beispielsweise antwortet in diesem Fall die Methode home() auf GET-Anfragen an die Root-URL.
Wenn ein Benutzer example.com/ besucht, sendet dessen Browser eine HTTP-GET-Anfrage an den Server, die die Spring-Anwendung erreicht. Das Spring-Framework findet das passende @RequestMapping im HomeController, ruft die Methode home() zur Bearbeitung der Anfrage auf und sendet anschließend die entsprechende Antwort an den Browser des Benutzers zurück.
Es gibt Annotationen, die eine präzisere Zuordnung für den Typ der Request-Methode ermöglichen, wie @GetMapping, @PostMapping, @DeleteMapping und so weiter. In deren Attributen wird einfach die URL angegeben, über die sie erreichbar sind.
Main.java
In diesem Beispiel werden wir beim Zugriff auf die URL /home ausschließlich dann zur Methode home() weitergeleitet, wenn es sich um eine GET-Anfrage handelt. Wird eine andere Art von Request-Methode verwendet, antwortet der Server für diese URL mit einem 404 Not Found-Fehler.
@RequestParam
Was sind URL-Request-Parameter? Dies sind die Parameter, die nach dem Fragezeichen in der URL erscheinen. Beispielsweise, wenn wir die Adresse -> example.com/home?name=Alex (Schlüssel = name, Wert = Alex) haben, können wir den Parameter (name) direkt in der Methode welcomeUser() abrufen.
Main.java
Hier wird der Parameter name aus der URL (/home?name=Alex) extrahiert und an die Methode welcomeUser() übergeben.
Es können auch mehrere Parameter extrahiert werden, nicht nur ein einzelner. Alle Parameter in der URL müssen durch das Symbol & getrennt werden. Beispiel: example.com/home?name=Alex&age=20.
Main.java
In diesem Beispiel kann auf den Endpunkt /home über eine URL wie example.com/home?name=Alex&age=20 zugegriffen werden, wobei name und age die an die Methode übergebenen Parameter sind.
@PathVariable
In Spring MVC wird die Annotation @PathVariable verwendet, um eine Variable in der URL direkt an einen Methodenparameter zu binden. Sie ermöglicht das Erfassen von dynamischen Werten aus der URL und deren Verwendung innerhalb der Methode.
Wenn eine URL dynamisch gesetzt werden soll, das heißt, ein Wert direkt in der URL übergeben wird, kann die Annotation @PathVariable verwendet werden.
Beispielsweise kann bei einem URL-Muster wie /users/{id} mit @PathVariable auf den Teil {id} der URL zugegriffen und dieser als Parameter an die Methode übergeben werden.
Main.java
In diesem Beispiel wird id aus der URL (/user/123) extrahiert und an die Methode getUser() übergeben, wobei der Wert 123 dem Parameter userId zugewiesen wird.
Diese Annotationen ermöglichen es Entwicklern, die Verarbeitung von HTTP-Anfragen einfach zu konfigurieren, Daten an Objekte zu binden und Antworten zu verwalten, was die Lesbarkeit und Wartbarkeit des Codes verbessert.
Zusammenfassung
Spring MVC vereinfacht die Entwicklung von Webanwendungen, indem es die Verarbeitung von Anfragen, die Anwendungslogik und das Rendering der Ansicht trennt. Controller, die mit der Annotation @Controller oder @RestController versehen sind, bearbeiten Anfragen und liefern Daten zur Anzeige zurück.
1. Was bewirkt die Annotation @Controller in Spring MVC?
2. Welche Annotationsmethode wird in Spring MVC verwendet, um GET requests zu verarbeiten?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
What is the difference between @RequestParam and @PathVariable?
Can you explain more about the three-tier architecture in Spring MVC?
How does Spring automatically create instances of annotated classes?
Awesome!
Completion rate improved to 3.45
Spring-MVC
Swipe um das Menü anzuzeigen
Warum Spring MVC benötigt wird
Spring MVC unterstützt die Organisation einer Webanwendung durch das Prinzip der Trennung von Verantwortlichkeiten, was die Entwicklung, das Testen und die Wartung des Codes erleichtert. Es stellt ein Framework zur Verfügung, um Webseiten zu erstellen und Benutzeranfragen zu verarbeiten sowie die Integration mit Geschäftslogik und Datenbanken zu ermöglichen.
In unserer Anwendung verwenden wir eine Drei-Schichten-Architektur, um die Logik in separate Module zu unterteilen. Wir haben die Schichten repository, service und controller. Diese Trennung erleichtert die Wartung und das Testen der Anwendung.
Wichtige Annotationen und ihre Rolle
Für jede Schicht gibt es spezifische Annotationen, die für Spring unerlässlich sind, um Komponenten im Application Context automatisch zu erkennen und zu registrieren (was dies bedeutet, wird später erläutert). Dies trägt zur Aufrechterhaltung einer übersichtlicheren Architektur bei und verbessert die Lesbarkeit des Codes.
Annotation der Repository-Schicht
Die @Repository-Annotation kennzeichnet eine Klasse, die mit der Datenbank interagiert. Diese Klassen enthalten in der Regel Methoden zur Durchführung von CRUD-Operationen (Create, Read, Update, Delete).
UserRepository.java
In diesem Beispiel ist UserRepository als Repository gekennzeichnet, wodurch Spring die Behandlung von datenzugriffsbezogenen Ausnahmen übernimmt und es automatisch in die Anwendung integriert.
Service-Layer-Annotation
Die @Service-Annotation wird verwendet, um eine Klasse als Komponente der Geschäftslogik zu kennzeichnen. Diese Klassen enthalten Methoden, die die Geschäftsregeln und Operationen der Anwendung implementieren.
UserService.java
Die @Service Annotation zeigt an, dass diese Klasse die Geschäftslogik der Anwendung enthält und somit leicht in anderen Teilen der Anwendung verwendet werden kann. Dies vereinfacht die Entwicklung, da Sie Instanzen dieser Klasse nicht manuell erstellen müssen — Spring übernimmt das für Sie.
Annotation der Controller-Schicht
Da die Controller-Schicht als Interaktionspunkt zwischen dem Client und unserer Anwendung dient, müssen wir Endpunkte bereitstellen, über die Clients darauf zugreifen können. Dies beinhaltet die Zuordnung bestimmter URLs zu jeweiligen Methoden, sodass Clients direkt mit diesen Methoden interagieren können.
Um dies zu erreichen, muss die Klasse mit @Controller annotiert und eine Methode definiert werden, die als Request Handler fungiert.
Main.java
Die @RequestMapping-Annotation wird verwendet, um HTTP-Anfragen mit bestimmten Methoden im Controller zu verknüpfen. Sie legt fest, auf welche URL-Muster und Anfragetypen (wie GET oder POST) eine Methode reagieren soll. Beispielsweise antwortet in diesem Fall die Methode home() auf GET-Anfragen an die Root-URL.
Wenn ein Benutzer example.com/ besucht, sendet dessen Browser eine HTTP-GET-Anfrage an den Server, die die Spring-Anwendung erreicht. Das Spring-Framework findet das passende @RequestMapping im HomeController, ruft die Methode home() zur Bearbeitung der Anfrage auf und sendet anschließend die entsprechende Antwort an den Browser des Benutzers zurück.
Es gibt Annotationen, die eine präzisere Zuordnung für den Typ der Request-Methode ermöglichen, wie @GetMapping, @PostMapping, @DeleteMapping und so weiter. In deren Attributen wird einfach die URL angegeben, über die sie erreichbar sind.
Main.java
In diesem Beispiel werden wir beim Zugriff auf die URL /home ausschließlich dann zur Methode home() weitergeleitet, wenn es sich um eine GET-Anfrage handelt. Wird eine andere Art von Request-Methode verwendet, antwortet der Server für diese URL mit einem 404 Not Found-Fehler.
@RequestParam
Was sind URL-Request-Parameter? Dies sind die Parameter, die nach dem Fragezeichen in der URL erscheinen. Beispielsweise, wenn wir die Adresse -> example.com/home?name=Alex (Schlüssel = name, Wert = Alex) haben, können wir den Parameter (name) direkt in der Methode welcomeUser() abrufen.
Main.java
Hier wird der Parameter name aus der URL (/home?name=Alex) extrahiert und an die Methode welcomeUser() übergeben.
Es können auch mehrere Parameter extrahiert werden, nicht nur ein einzelner. Alle Parameter in der URL müssen durch das Symbol & getrennt werden. Beispiel: example.com/home?name=Alex&age=20.
Main.java
In diesem Beispiel kann auf den Endpunkt /home über eine URL wie example.com/home?name=Alex&age=20 zugegriffen werden, wobei name und age die an die Methode übergebenen Parameter sind.
@PathVariable
In Spring MVC wird die Annotation @PathVariable verwendet, um eine Variable in der URL direkt an einen Methodenparameter zu binden. Sie ermöglicht das Erfassen von dynamischen Werten aus der URL und deren Verwendung innerhalb der Methode.
Wenn eine URL dynamisch gesetzt werden soll, das heißt, ein Wert direkt in der URL übergeben wird, kann die Annotation @PathVariable verwendet werden.
Beispielsweise kann bei einem URL-Muster wie /users/{id} mit @PathVariable auf den Teil {id} der URL zugegriffen und dieser als Parameter an die Methode übergeben werden.
Main.java
In diesem Beispiel wird id aus der URL (/user/123) extrahiert und an die Methode getUser() übergeben, wobei der Wert 123 dem Parameter userId zugewiesen wird.
Diese Annotationen ermöglichen es Entwicklern, die Verarbeitung von HTTP-Anfragen einfach zu konfigurieren, Daten an Objekte zu binden und Antworten zu verwalten, was die Lesbarkeit und Wartbarkeit des Codes verbessert.
Zusammenfassung
Spring MVC vereinfacht die Entwicklung von Webanwendungen, indem es die Verarbeitung von Anfragen, die Anwendungslogik und das Rendering der Ansicht trennt. Controller, die mit der Annotation @Controller oder @RestController versehen sind, bearbeiten Anfragen und liefern Daten zur Anzeige zurück.
1. Was bewirkt die Annotation @Controller in Spring MVC?
2. Welche Annotationsmethode wird in Spring MVC verwendet, um GET requests zu verarbeiten?
Danke für Ihr Feedback!