Spring MVC
Hvorfor du har brug for Spring MVC
Spring MVC hjælper med at organisere en webapplikation ved at følge princippet om adskillelse af bekymringer, hvilket gør det lettere at udvikle, teste og vedligeholde kode. Det tilbyder et framework til at oprette websider og håndtere brugerforespørgsler, samt til integration med forretningslogik og databaser.
I vores applikation anvender vi en trelagsarkitektur for at opdele logikken i adskilte moduler. Vi har lagene repository, service og controller. Denne opdeling gør det nemmere at vedligeholde og teste applikationen.
Nøgleannotationer og deres rolle
For hvert lag har vi specifikke annotationer, som er essentielle for, at Spring kan automatisk genkende og registrere komponenter i applikationskonteksten (vi vil diskutere, hvad dette betyder senere). Dette hjælper med at opretholde en renere arkitektur og forbedrer kodelæsbarheden.
Repository-lag annotation
@Repository annotationen bruges til at angive en klasse, der interagerer med databasen. Disse klasser indeholder typisk metoder til at udføre CRUD-operationer (Create, Read, Update, Delete).
UserRepository.java
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 dette eksempel er UserRepository markeret som et repository, hvilket gør det muligt for Spring at håndtere dataadgangsrelaterede undtagelser og automatisk integrere det i applikationen.
Service-lag-annotation
@Service annotationen bruges til at betegne en klasse som en komponent af forretningslogikken. Disse klasser indeholder metoder, der implementerer applikationens forretningsregler og operationer.
UserService.java
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 } }
@Service annotationen angiver, at denne klasse indeholder applikationens forretningslogik, hvilket gør det nemt at anvende i andre dele af applikationen. Dette forenkler udviklingen, da du ikke manuelt behøver at oprette instanser af denne klasse — Spring håndterer det for dig.
Annotation for controllerlaget
Da controller-laget fungerer som interaktionspunkt mellem klienten og vores applikation, skal der oprettes endpoints for at give klienter adgang. Dette indebærer at tilknytte specifikke URL'er til hver metode, hvilket gør det muligt for klienter at interagere direkte med disse metoder.
For at opnå dette skal klassen annoteres som en @Controller, og der skal defineres en metode, der fungerer som request handler.
Main.java
12345678@Controller public class HomeController { @RequestMapping(value = "/", method = RequestMethod.GET) public String home() { // code } }
@RequestMapping-annotationen bruges til at forbinde HTTP-forespørgsler med specifikke metoder i controlleren. Den angiver, hvilke URL-mønstre og typer af forespørgsler (såsom GET eller POST) en metode skal reagere på. For eksempel vil home()-metoden i dette tilfælde reagere på GET-forespørgsler til root-URL'en.
Når en bruger besøger example.com/, sender deres browser en HTTP GET-anmodning til serveren, som når frem til Spring-applikationen. Spring-frameworket finder den matchende @RequestMapping i HomeController, kalder home()-metoden for at håndtere anmodningen, og sender derefter det relevante svar tilbage til brugerens browser.
Der findes annotationer, der giver en mere præcis mapping for typen af request-metode, såsom @GetMapping, @PostMapping, @DeleteMapping og så videre. I deres attributter angiver du blot den URL, der kan bruges til at tilgå dem.
Main.java
12345678@Controller public class HomeController { @GetMapping("/home") public String home() { // code } }
I dette eksempel, hvis vi tilgår URL'en /home, vil vi blive dirigeret til home()-metoden KUN, hvis det var en GET-anmodning. Hvis en anden type anmodningsmetode bruges, vil serveren svare med en 404 Not Found-fejl for den URL.
@RequestParam
Hvad er URL-anmodningsparametre? Dette er de parametre, der vises efter spørgsmålstegnet i URL'en. For eksempel, hvis vi har adressen -> example.com/home?name=Alex (nøgle = name, værdi = Alex), kan vi direkte hente parameteren (name) i welcomeUser()-metoden.
Main.java
12345678@Controller public class WelcomeController { @GetMapping("/home") public String welcomeUser(@RequestParam(name = "name") String name) { // code } }
Her bliver parameteren name udtrukket fra URL'en (/home?name=Alex) og videregivet til welcomeUser()-metoden.
Det er også muligt at udtrække mere end én parameter, ikke kun en enkelt. Alle parametre i URL'en skal adskilles med &-symbolet. For eksempel: example.com/home?name=Alex&age=20.
Main.java
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 dette eksempel kan endpointet /home tilgås med en URL som example.com/home?name=Alex&age=20, hvor name og age er parametre sendt til metoden.
@PathVariable
I Spring MVC bruges @PathVariable-annotationen til at binde en variabel i URL'en direkte til en metodeparameter. Dette gør det muligt at opfange dynamiske værdier fra URL'en og anvende dem i metoden.
Hvis der er behov for dynamisk at angive en URL, hvilket betyder at en værdi indsættes direkte i URL'en, kan @PathVariable-annotationen benyttes.
For eksempel, hvis der findes et URL-mønster som /users/{id}, kan @PathVariable anvendes til at tilgå {id}-delen af URL'en og videregive den som en parameter til metoden.
Main.java
12345678@Controller public class UserController { @GetMapping("/user/{id}") public String getUser(@PathVariable("id") Long userId) { // code } }
I dette eksempel udtrækkes id fra URL'en (/user/123) og videregives til getUser()-metoden, hvor værdien 123 tildeles userId-parameteren.
Disse annotationer hjælper udviklere med nemt at konfigurere HTTP-anmodningshåndtering, binde data til objekter og håndtere svar, hvilket forbedrer kodens læsbarhed og vedligeholdelse.
Resumé
Spring MVC forenkler udviklingen af webapplikationer ved at adskille anmodningshåndtering, applikationslogik og visningsrendering. Controllere, markeret med annotationen @Controller eller @RestController, håndterer anmodninger og returnerer data til visning.
1. Hvad gør annoteringen @Controller i Spring MVC?
2. Hvilken annoteringsmetode bruges til at håndtere GET requests i Spring MVC?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 3.45
Spring MVC
Stryg for at vise menuen
Hvorfor du har brug for Spring MVC
Spring MVC hjælper med at organisere en webapplikation ved at følge princippet om adskillelse af bekymringer, hvilket gør det lettere at udvikle, teste og vedligeholde kode. Det tilbyder et framework til at oprette websider og håndtere brugerforespørgsler, samt til integration med forretningslogik og databaser.
I vores applikation anvender vi en trelagsarkitektur for at opdele logikken i adskilte moduler. Vi har lagene repository, service og controller. Denne opdeling gør det nemmere at vedligeholde og teste applikationen.
Nøgleannotationer og deres rolle
For hvert lag har vi specifikke annotationer, som er essentielle for, at Spring kan automatisk genkende og registrere komponenter i applikationskonteksten (vi vil diskutere, hvad dette betyder senere). Dette hjælper med at opretholde en renere arkitektur og forbedrer kodelæsbarheden.
Repository-lag annotation
@Repository annotationen bruges til at angive en klasse, der interagerer med databasen. Disse klasser indeholder typisk metoder til at udføre CRUD-operationer (Create, Read, Update, Delete).
UserRepository.java
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 dette eksempel er UserRepository markeret som et repository, hvilket gør det muligt for Spring at håndtere dataadgangsrelaterede undtagelser og automatisk integrere det i applikationen.
Service-lag-annotation
@Service annotationen bruges til at betegne en klasse som en komponent af forretningslogikken. Disse klasser indeholder metoder, der implementerer applikationens forretningsregler og operationer.
UserService.java
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 } }
@Service annotationen angiver, at denne klasse indeholder applikationens forretningslogik, hvilket gør det nemt at anvende i andre dele af applikationen. Dette forenkler udviklingen, da du ikke manuelt behøver at oprette instanser af denne klasse — Spring håndterer det for dig.
Annotation for controllerlaget
Da controller-laget fungerer som interaktionspunkt mellem klienten og vores applikation, skal der oprettes endpoints for at give klienter adgang. Dette indebærer at tilknytte specifikke URL'er til hver metode, hvilket gør det muligt for klienter at interagere direkte med disse metoder.
For at opnå dette skal klassen annoteres som en @Controller, og der skal defineres en metode, der fungerer som request handler.
Main.java
12345678@Controller public class HomeController { @RequestMapping(value = "/", method = RequestMethod.GET) public String home() { // code } }
@RequestMapping-annotationen bruges til at forbinde HTTP-forespørgsler med specifikke metoder i controlleren. Den angiver, hvilke URL-mønstre og typer af forespørgsler (såsom GET eller POST) en metode skal reagere på. For eksempel vil home()-metoden i dette tilfælde reagere på GET-forespørgsler til root-URL'en.
Når en bruger besøger example.com/, sender deres browser en HTTP GET-anmodning til serveren, som når frem til Spring-applikationen. Spring-frameworket finder den matchende @RequestMapping i HomeController, kalder home()-metoden for at håndtere anmodningen, og sender derefter det relevante svar tilbage til brugerens browser.
Der findes annotationer, der giver en mere præcis mapping for typen af request-metode, såsom @GetMapping, @PostMapping, @DeleteMapping og så videre. I deres attributter angiver du blot den URL, der kan bruges til at tilgå dem.
Main.java
12345678@Controller public class HomeController { @GetMapping("/home") public String home() { // code } }
I dette eksempel, hvis vi tilgår URL'en /home, vil vi blive dirigeret til home()-metoden KUN, hvis det var en GET-anmodning. Hvis en anden type anmodningsmetode bruges, vil serveren svare med en 404 Not Found-fejl for den URL.
@RequestParam
Hvad er URL-anmodningsparametre? Dette er de parametre, der vises efter spørgsmålstegnet i URL'en. For eksempel, hvis vi har adressen -> example.com/home?name=Alex (nøgle = name, værdi = Alex), kan vi direkte hente parameteren (name) i welcomeUser()-metoden.
Main.java
12345678@Controller public class WelcomeController { @GetMapping("/home") public String welcomeUser(@RequestParam(name = "name") String name) { // code } }
Her bliver parameteren name udtrukket fra URL'en (/home?name=Alex) og videregivet til welcomeUser()-metoden.
Det er også muligt at udtrække mere end én parameter, ikke kun en enkelt. Alle parametre i URL'en skal adskilles med &-symbolet. For eksempel: example.com/home?name=Alex&age=20.
Main.java
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 dette eksempel kan endpointet /home tilgås med en URL som example.com/home?name=Alex&age=20, hvor name og age er parametre sendt til metoden.
@PathVariable
I Spring MVC bruges @PathVariable-annotationen til at binde en variabel i URL'en direkte til en metodeparameter. Dette gør det muligt at opfange dynamiske værdier fra URL'en og anvende dem i metoden.
Hvis der er behov for dynamisk at angive en URL, hvilket betyder at en værdi indsættes direkte i URL'en, kan @PathVariable-annotationen benyttes.
For eksempel, hvis der findes et URL-mønster som /users/{id}, kan @PathVariable anvendes til at tilgå {id}-delen af URL'en og videregive den som en parameter til metoden.
Main.java
12345678@Controller public class UserController { @GetMapping("/user/{id}") public String getUser(@PathVariable("id") Long userId) { // code } }
I dette eksempel udtrækkes id fra URL'en (/user/123) og videregives til getUser()-metoden, hvor værdien 123 tildeles userId-parameteren.
Disse annotationer hjælper udviklere med nemt at konfigurere HTTP-anmodningshåndtering, binde data til objekter og håndtere svar, hvilket forbedrer kodens læsbarhed og vedligeholdelse.
Resumé
Spring MVC forenkler udviklingen af webapplikationer ved at adskille anmodningshåndtering, applikationslogik og visningsrendering. Controllere, markeret med annotationen @Controller eller @RestController, håndterer anmodninger og returnerer data til visning.
1. Hvad gør annoteringen @Controller i Spring MVC?
2. Hvilken annoteringsmetode bruges til at håndtere GET requests i Spring MVC?
Tak for dine kommentarer!