Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Spring-MVC | Spring Boot-Grunder
Spring Boot Backend

bookSpring-MVC

Varför du behöver Spring MVC

Spring MVC hjälper till att organisera en webbapplikation genom att följa principen om separation av ansvar, vilket gör det enklare att utveckla, testa och underhålla kod. Det tillhandahåller ett ramverk för att skapa webbsidor och hantera användarförfrågningar, samt för att integrera med affärslogik och databaser.

I vår applikation använder vi en trelagersarkitektur för att separera logiken i distinkta moduler. Vi har lager för repository, service och controller. Denna separation gör det enklare att underhålla och testa applikationen.

Viktiga annoteringar och deras roll

För varje lager finns specifika annoteringar som är avgörande för att Spring ska kunna automatiskt känna igen och registrera komponenter i applikationskontexten (vi kommer att diskutera vad detta innebär senare). Detta bidrar till att upprätthålla en renare arkitektur och förbättrar kodens läsbarhet.

Annotering för repository-lagret

Annoteringen @Repository används för att indikera en klass som interagerar med databasen. Dessa klasser innehåller vanligtvis metoder för att utföra CRUD-operationer (Create, Read, Update, Delete).

UserRepository.java

UserRepository.java

copy
1234567
@Repository public class UserRepository { // Method to find a user by their ID public User findById(Long id) { // Logic to retrieve the user from the database } }

I det här exemplet är UserRepository markerad som ett repository, vilket gör att Spring kan hantera dataåtkomstrelaterade undantag och automatiskt integrera det i applikationen.

Tjänstelager-annotering

@Service-annoteringen används för att ange en klass som en komponent av affärslogiken. Dessa klasser innehåller metoder som implementerar applikationens affärsregler och operationer.

UserService.java

UserService.java

copy
1234567
@Service public class UserService { // Method to retrieve a user by their ID public User getUserById(Long id) { // Logic to get the user by ID } }

Annoteringen @Service indikerar att denna klass innehåller applikationens affärslogik, vilket gör den enkel att använda i andra delar av applikationen. Detta förenklar utvecklingen eftersom du inte behöver skapa instanser av denna klass manuellt — Spring hanterar det åt dig.

Annotering för Controller-lager

Eftersom controller-lagret fungerar som interaktionspunkt mellan klienten och vår applikation, behöver vi upprätta endpoints för att klienter ska kunna komma åt det. Detta innebär att associera specifika URL:er med varje metod, vilket möjliggör för klienter att interagera direkt med dessa metoder.

För att uppnå detta behöver vi anotera klassen som en @Controller och definiera en metod som fungerar som request handler.

Main.java

Main.java

copy
12345678
@Controller public class HomeController { @RequestMapping(value = "/", method = RequestMethod.GET) public String home() { // code } }

@RequestMapping-anotationen används för att koppla HTTP-förfrågningar till specifika metoder i controllern. Den hjälper till att specificera vilka URL-mönster och typer av förfrågningar (såsom GET eller POST) en metod ska svara på. Till exempel, i detta fall kommer home()-metoden att svara på GET-förfrågningar som görs till root-URL:en.

När en användare besöker example.com/, skickar deras webbläsare en HTTP GET-begäran till servern, som når Spring-applikationen. Spring-ramverket hittar den matchande @RequestMapping i HomeController, anropar metoden home() för att hantera begäran, och skickar sedan tillbaka ett lämpligt svar till användarens webbläsare.

Det finns annotationer som ger en mer precis mappning för typen av begäranmetod, såsom @GetMapping, @PostMapping, @DeleteMapping och så vidare. I deras attribut anger du helt enkelt den URL som kan användas för att komma åt dem.

Main.java

Main.java

copy
12345678
@Controller public class HomeController { @GetMapping("/home") public String home() { // code } }

I det här exemplet, om vi går till URL:en /home, kommer vi att dirigeras till metoden home() ENDAST om det är en GET-begäran. Om en annan typ av begäran används, kommer servern att svara med ett 404 Not Found-fel för den URL:en.

@RequestParam

Vad är URL-begäransparametrar? Det är de parametrar som visas efter frågetecknet i URL:en. Till exempel, om vi har adressen -> example.com/home?name=Alex (nyckel = name, värde = Alex), kan vi direkt hämta parametern (name) i metoden welcomeUser().

Main.java

Main.java

copy
12345678
@Controller public class WelcomeController { @GetMapping("/home") public String welcomeUser(@RequestParam(name = "name") String name) { // code } }

Här extraheras parametern name från URL:en (/home?name=Alex) och skickas till metoden welcomeUser().

Det går även att extrahera fler än en parameter, inte bara en enskild. Alla parametrar i URL:en ska separeras med &-symbolen. Exempel: example.com/home?name=Alex&age=20.

Main.java

Main.java

copy
12345
@GetMapping("/home") public String getUserInfo(@RequestParam String name, @RequestParam int age) { // Logic to handle the request using 'name' and 'age' parameters return "User Name: " + name + ", Age: " + age; }

I det här exemplet kan slutpunkten /home nås med en URL som example.com/home?name=Alex&age=20, där name och age är parametrar som skickas till metoden.

@PathVariable

I Spring MVC används annoteringen @PathVariable för att binda en variabel i URL:en direkt till en metodparameter. Detta möjliggör att fånga upp dynamiska värden från URL:en och använda dem i metoden.

Om det finns behov av att dynamiskt ange en URL, det vill säga att ett värde skickas direkt i URL:en, kan annoteringen @PathVariable användas.

Till exempel, om det finns ett URL-mönster som /users/{id}, kan @PathVariable användas för att hämta {id}-delen av URL:en och skicka den som en parameter till din metod.

Main.java

Main.java

copy
12345678
@Controller public class UserController { @GetMapping("/user/{id}") public String getUser(@PathVariable("id") Long userId) { // code } }

I detta exempel extraheras id från URL:en (/user/123) och skickas till metoden getUser(), där värdet 123 tilldelas parametern userId.

Dessa anoteringar hjälper utvecklare att enkelt konfigurera HTTP-begäran-hantering, binda data till objekt och hantera svar, vilket förbättrar kodens läsbarhet och underhållbarhet.

Sammanfattning

Spring MVC förenklar utvecklingen av webbapplikationer genom att separera begäran hantering, applikationslogik och vy-rendering. Controllers, markerade med anoteringen @Controller eller @RestController, hanterar begäranden och returnerar data för visning.

1. Vad gör anoteringen @Controller i Spring MVC?

2. Vilken annoteringsmetod används för att hantera GET requests i Spring MVC?

question mark

Vad gör anoteringen @Controller i Spring MVC?

Select the correct answer

question mark

Vilken annoteringsmetod används för att hantera GET requests i Spring MVC?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 3

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Suggested prompts:

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

bookSpring-MVC

Svep för att visa menyn

Varför du behöver Spring MVC

Spring MVC hjälper till att organisera en webbapplikation genom att följa principen om separation av ansvar, vilket gör det enklare att utveckla, testa och underhålla kod. Det tillhandahåller ett ramverk för att skapa webbsidor och hantera användarförfrågningar, samt för att integrera med affärslogik och databaser.

I vår applikation använder vi en trelagersarkitektur för att separera logiken i distinkta moduler. Vi har lager för repository, service och controller. Denna separation gör det enklare att underhålla och testa applikationen.

Viktiga annoteringar och deras roll

För varje lager finns specifika annoteringar som är avgörande för att Spring ska kunna automatiskt känna igen och registrera komponenter i applikationskontexten (vi kommer att diskutera vad detta innebär senare). Detta bidrar till att upprätthålla en renare arkitektur och förbättrar kodens läsbarhet.

Annotering för repository-lagret

Annoteringen @Repository används för att indikera en klass som interagerar med databasen. Dessa klasser innehåller vanligtvis metoder för att utföra CRUD-operationer (Create, Read, Update, Delete).

UserRepository.java

UserRepository.java

copy
1234567
@Repository public class UserRepository { // Method to find a user by their ID public User findById(Long id) { // Logic to retrieve the user from the database } }

I det här exemplet är UserRepository markerad som ett repository, vilket gör att Spring kan hantera dataåtkomstrelaterade undantag och automatiskt integrera det i applikationen.

Tjänstelager-annotering

@Service-annoteringen används för att ange en klass som en komponent av affärslogiken. Dessa klasser innehåller metoder som implementerar applikationens affärsregler och operationer.

UserService.java

UserService.java

copy
1234567
@Service public class UserService { // Method to retrieve a user by their ID public User getUserById(Long id) { // Logic to get the user by ID } }

Annoteringen @Service indikerar att denna klass innehåller applikationens affärslogik, vilket gör den enkel att använda i andra delar av applikationen. Detta förenklar utvecklingen eftersom du inte behöver skapa instanser av denna klass manuellt — Spring hanterar det åt dig.

Annotering för Controller-lager

Eftersom controller-lagret fungerar som interaktionspunkt mellan klienten och vår applikation, behöver vi upprätta endpoints för att klienter ska kunna komma åt det. Detta innebär att associera specifika URL:er med varje metod, vilket möjliggör för klienter att interagera direkt med dessa metoder.

För att uppnå detta behöver vi anotera klassen som en @Controller och definiera en metod som fungerar som request handler.

Main.java

Main.java

copy
12345678
@Controller public class HomeController { @RequestMapping(value = "/", method = RequestMethod.GET) public String home() { // code } }

@RequestMapping-anotationen används för att koppla HTTP-förfrågningar till specifika metoder i controllern. Den hjälper till att specificera vilka URL-mönster och typer av förfrågningar (såsom GET eller POST) en metod ska svara på. Till exempel, i detta fall kommer home()-metoden att svara på GET-förfrågningar som görs till root-URL:en.

När en användare besöker example.com/, skickar deras webbläsare en HTTP GET-begäran till servern, som når Spring-applikationen. Spring-ramverket hittar den matchande @RequestMapping i HomeController, anropar metoden home() för att hantera begäran, och skickar sedan tillbaka ett lämpligt svar till användarens webbläsare.

Det finns annotationer som ger en mer precis mappning för typen av begäranmetod, såsom @GetMapping, @PostMapping, @DeleteMapping och så vidare. I deras attribut anger du helt enkelt den URL som kan användas för att komma åt dem.

Main.java

Main.java

copy
12345678
@Controller public class HomeController { @GetMapping("/home") public String home() { // code } }

I det här exemplet, om vi går till URL:en /home, kommer vi att dirigeras till metoden home() ENDAST om det är en GET-begäran. Om en annan typ av begäran används, kommer servern att svara med ett 404 Not Found-fel för den URL:en.

@RequestParam

Vad är URL-begäransparametrar? Det är de parametrar som visas efter frågetecknet i URL:en. Till exempel, om vi har adressen -> example.com/home?name=Alex (nyckel = name, värde = Alex), kan vi direkt hämta parametern (name) i metoden welcomeUser().

Main.java

Main.java

copy
12345678
@Controller public class WelcomeController { @GetMapping("/home") public String welcomeUser(@RequestParam(name = "name") String name) { // code } }

Här extraheras parametern name från URL:en (/home?name=Alex) och skickas till metoden welcomeUser().

Det går även att extrahera fler än en parameter, inte bara en enskild. Alla parametrar i URL:en ska separeras med &-symbolen. Exempel: example.com/home?name=Alex&age=20.

Main.java

Main.java

copy
12345
@GetMapping("/home") public String getUserInfo(@RequestParam String name, @RequestParam int age) { // Logic to handle the request using 'name' and 'age' parameters return "User Name: " + name + ", Age: " + age; }

I det här exemplet kan slutpunkten /home nås med en URL som example.com/home?name=Alex&age=20, där name och age är parametrar som skickas till metoden.

@PathVariable

I Spring MVC används annoteringen @PathVariable för att binda en variabel i URL:en direkt till en metodparameter. Detta möjliggör att fånga upp dynamiska värden från URL:en och använda dem i metoden.

Om det finns behov av att dynamiskt ange en URL, det vill säga att ett värde skickas direkt i URL:en, kan annoteringen @PathVariable användas.

Till exempel, om det finns ett URL-mönster som /users/{id}, kan @PathVariable användas för att hämta {id}-delen av URL:en och skicka den som en parameter till din metod.

Main.java

Main.java

copy
12345678
@Controller public class UserController { @GetMapping("/user/{id}") public String getUser(@PathVariable("id") Long userId) { // code } }

I detta exempel extraheras id från URL:en (/user/123) och skickas till metoden getUser(), där värdet 123 tilldelas parametern userId.

Dessa anoteringar hjälper utvecklare att enkelt konfigurera HTTP-begäran-hantering, binda data till objekt och hantera svar, vilket förbättrar kodens läsbarhet och underhållbarhet.

Sammanfattning

Spring MVC förenklar utvecklingen av webbapplikationer genom att separera begäran hantering, applikationslogik och vy-rendering. Controllers, markerade med anoteringen @Controller eller @RestController, hanterar begäranden och returnerar data för visning.

1. Vad gör anoteringen @Controller i Spring MVC?

2. Vilken annoteringsmetod används för att hantera GET requests i Spring MVC?

question mark

Vad gör anoteringen @Controller i Spring MVC?

Select the correct answer

question mark

Vilken annoteringsmetod används för att hantera GET requests i Spring MVC?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 2. Kapitel 3
some-alt