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

bookSpring MVC

Hvorfor du trenger Spring MVC

Spring MVC bidrar til å organisere en webapplikasjon ved å følge prinsippet om separasjon av ansvar, noe som gjør det enklere å utvikle, teste og vedlikeholde kode. Det tilbyr et rammeverk for å lage websider og håndtere brukerforespørsler, samt for integrasjon med forretningslogikk og databaser.

I vår applikasjon benytter vi en trelagsarkitektur for å dele opp logikken i adskilte moduler. Vi har repository, service og controller lag. Denne separasjonen gjør det enklere å vedlikeholde og teste applikasjonen.

Nøkkelannotasjoner og deres rolle

For hvert lag finnes det spesifikke annotasjoner som er avgjørende for at Spring skal kunne automatisk gjenkjenne og registrere komponenter i applikasjonskonteksten (vi kommer tilbake til hva dette betyr senere). Dette bidrar til å opprettholde en renere arkitektur og forbedrer lesbarheten i koden.

Repository-lagets annotasjon

Annotasjonen @Repository brukes for å indikere en klasse som interagerer med databasen. Disse klassene inneholder vanligvis metoder for å utføre CRUD-operasjoner (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 dette eksemplet er UserRepository markert som et repository, noe som gjør at Spring kan håndtere datarelaterte unntak og automatisk integrere det i applikasjonen.

Service-lag annotasjon

@Service-annotasjonen brukes for å angi en klasse som en komponent av forretningslogikken. Disse klassene inneholder metoder som implementerer applikasjonens forretningsregler og operasjoner.

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 } }

@Service-annotasjonen indikerer at denne klassen inneholder applikasjonens forretningslogikk, noe som gjør den enkel å bruke i andre deler av applikasjonen. Dette forenkler utviklingen siden du ikke trenger å opprette instanser av denne klassen manuelt — Spring håndterer det for deg.

Annotasjon for Controller-laget

Siden kontrollerlaget fungerer som kontaktpunktet mellom klienten og vår applikasjon, må vi etablere endepunkter for at klienter skal få tilgang. Dette innebærer å knytte spesifikke URL-er til hver metode, slik at klienter kan samhandle direkte med disse metodene.

For å oppnå dette må vi annotere klassen som en @Controller og definere en metode som skal fungere som forespørselsbehandler.

Main.java

Main.java

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

@RequestMapping-annotasjonen brukes til å knytte HTTP-forespørsler til spesifikke metoder i kontrolleren. Den hjelper med å angi hvilke URL-mønstre og typer forespørsler (som GET eller POST) en metode skal svare på. For eksempel vil home()-metoden svare på GET-forespørsler til rot-URL-en.

Når en bruker besøker example.com/, sender deres nettleser en HTTP GET-forespørsel til serveren, som når frem til Spring-applikasjonen. Spring-rammeverket finner den tilsvarende @RequestMapping i HomeController, kaller home()-metoden for å håndtere forespørselen, og sender deretter tilbake det passende svaret til brukerens nettleser.

Det finnes annotasjoner som gir en mer presis mapping for typen forespørselsmetode, som @GetMapping, @PostMapping, @DeleteMapping og så videre. I deres attributter spesifiserer du enkelt URL-en som kan brukes for å få tilgang til dem.

Main.java

Main.java

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

I dette eksempelet, hvis vi går til URL-en /home, vil vi bli viderekoblet til home()-metoden KUN hvis det er en GET-forespørsel. Hvis en annen type forespørselsmetode brukes, vil serveren svare med en 404 Not Found-feil for den URL-en.

@RequestParam

Hva er URL-forespørselsparametere? Dette er parametrene som vises etter spørsmålstegnet i URL-en. For eksempel, hvis vi har adressen -> example.com/home?name=Alex (key = name, value = Alex), kan vi hente parameteren (name) direkte i welcomeUser()-metoden.

Main.java

Main.java

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

Her blir parameteren name hentet ut fra URL-en (/home?name=Alex) og sendt til welcomeUser()-metoden.

Det er også mulig å hente ut flere parametere, ikke bare én enkelt. Alle parametere i URL-en skal skilles med &-symbolet. For eksempel: 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 dette eksemplet kan endepunktet /home tilgås med en URL som example.com/home?name=Alex&age=20, hvor name og age er parametere som sendes til metoden.

@PathVariable

I Spring MVC brukes @PathVariable-annotasjonen for å binde en variabel i URL-en direkte til en metodeparameter. Dette gjør det mulig å hente dynamiske verdier fra URL-en og bruke dem i metoden.

Hvis du trenger å angi en URL dynamisk, det vil si at du sender en verdi direkte i URL-en, kan du bruke @PathVariable-annotasjonen.

For eksempel, hvis du har et URL-mønster som /users/{id}, kan du bruke @PathVariable for å få tilgang til {id}-delen av URL-en og sende den som en parameter til metoden din.

Main.java

Main.java

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

I dette eksemplet blir id hentet ut fra URL-en (/user/123) og sendt til getUser()-metoden, hvor verdien 123 tilordnes userId-parameteren.

Disse annotasjonene hjelper utviklere med å enkelt konfigurere HTTP-forespørselshåndtering, binde data til objekter og håndtere responser, noe som forbedrer lesbarhet og vedlikeholdbarhet av koden.

Sammendrag

Spring MVC forenkler utvikling av webapplikasjoner ved å separere forespørselshåndtering, applikasjonslogikk og visningsgenerering. Kontrollere, merket med annotasjonen @Controller eller @RestController, håndterer forespørsler og returnerer data for visning.

1. Hva gjør annotasjonen @Controller i Spring MVC?

2. Hvilken annotasjonsmetode brukes for å håndtere GET requests i Spring MVC?

question mark

Hva gjør annotasjonen @Controller i Spring MVC?

Select the correct answer

question mark

Hvilken annotasjonsmetode brukes for å håndtere GET requests i Spring MVC?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 3

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 3.45

bookSpring MVC

Sveip for å vise menyen

Hvorfor du trenger Spring MVC

Spring MVC bidrar til å organisere en webapplikasjon ved å følge prinsippet om separasjon av ansvar, noe som gjør det enklere å utvikle, teste og vedlikeholde kode. Det tilbyr et rammeverk for å lage websider og håndtere brukerforespørsler, samt for integrasjon med forretningslogikk og databaser.

I vår applikasjon benytter vi en trelagsarkitektur for å dele opp logikken i adskilte moduler. Vi har repository, service og controller lag. Denne separasjonen gjør det enklere å vedlikeholde og teste applikasjonen.

Nøkkelannotasjoner og deres rolle

For hvert lag finnes det spesifikke annotasjoner som er avgjørende for at Spring skal kunne automatisk gjenkjenne og registrere komponenter i applikasjonskonteksten (vi kommer tilbake til hva dette betyr senere). Dette bidrar til å opprettholde en renere arkitektur og forbedrer lesbarheten i koden.

Repository-lagets annotasjon

Annotasjonen @Repository brukes for å indikere en klasse som interagerer med databasen. Disse klassene inneholder vanligvis metoder for å utføre CRUD-operasjoner (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 dette eksemplet er UserRepository markert som et repository, noe som gjør at Spring kan håndtere datarelaterte unntak og automatisk integrere det i applikasjonen.

Service-lag annotasjon

@Service-annotasjonen brukes for å angi en klasse som en komponent av forretningslogikken. Disse klassene inneholder metoder som implementerer applikasjonens forretningsregler og operasjoner.

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 } }

@Service-annotasjonen indikerer at denne klassen inneholder applikasjonens forretningslogikk, noe som gjør den enkel å bruke i andre deler av applikasjonen. Dette forenkler utviklingen siden du ikke trenger å opprette instanser av denne klassen manuelt — Spring håndterer det for deg.

Annotasjon for Controller-laget

Siden kontrollerlaget fungerer som kontaktpunktet mellom klienten og vår applikasjon, må vi etablere endepunkter for at klienter skal få tilgang. Dette innebærer å knytte spesifikke URL-er til hver metode, slik at klienter kan samhandle direkte med disse metodene.

For å oppnå dette må vi annotere klassen som en @Controller og definere en metode som skal fungere som forespørselsbehandler.

Main.java

Main.java

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

@RequestMapping-annotasjonen brukes til å knytte HTTP-forespørsler til spesifikke metoder i kontrolleren. Den hjelper med å angi hvilke URL-mønstre og typer forespørsler (som GET eller POST) en metode skal svare på. For eksempel vil home()-metoden svare på GET-forespørsler til rot-URL-en.

Når en bruker besøker example.com/, sender deres nettleser en HTTP GET-forespørsel til serveren, som når frem til Spring-applikasjonen. Spring-rammeverket finner den tilsvarende @RequestMapping i HomeController, kaller home()-metoden for å håndtere forespørselen, og sender deretter tilbake det passende svaret til brukerens nettleser.

Det finnes annotasjoner som gir en mer presis mapping for typen forespørselsmetode, som @GetMapping, @PostMapping, @DeleteMapping og så videre. I deres attributter spesifiserer du enkelt URL-en som kan brukes for å få tilgang til dem.

Main.java

Main.java

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

I dette eksempelet, hvis vi går til URL-en /home, vil vi bli viderekoblet til home()-metoden KUN hvis det er en GET-forespørsel. Hvis en annen type forespørselsmetode brukes, vil serveren svare med en 404 Not Found-feil for den URL-en.

@RequestParam

Hva er URL-forespørselsparametere? Dette er parametrene som vises etter spørsmålstegnet i URL-en. For eksempel, hvis vi har adressen -> example.com/home?name=Alex (key = name, value = Alex), kan vi hente parameteren (name) direkte i welcomeUser()-metoden.

Main.java

Main.java

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

Her blir parameteren name hentet ut fra URL-en (/home?name=Alex) og sendt til welcomeUser()-metoden.

Det er også mulig å hente ut flere parametere, ikke bare én enkelt. Alle parametere i URL-en skal skilles med &-symbolet. For eksempel: 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 dette eksemplet kan endepunktet /home tilgås med en URL som example.com/home?name=Alex&age=20, hvor name og age er parametere som sendes til metoden.

@PathVariable

I Spring MVC brukes @PathVariable-annotasjonen for å binde en variabel i URL-en direkte til en metodeparameter. Dette gjør det mulig å hente dynamiske verdier fra URL-en og bruke dem i metoden.

Hvis du trenger å angi en URL dynamisk, det vil si at du sender en verdi direkte i URL-en, kan du bruke @PathVariable-annotasjonen.

For eksempel, hvis du har et URL-mønster som /users/{id}, kan du bruke @PathVariable for å få tilgang til {id}-delen av URL-en og sende den som en parameter til metoden din.

Main.java

Main.java

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

I dette eksemplet blir id hentet ut fra URL-en (/user/123) og sendt til getUser()-metoden, hvor verdien 123 tilordnes userId-parameteren.

Disse annotasjonene hjelper utviklere med å enkelt konfigurere HTTP-forespørselshåndtering, binde data til objekter og håndtere responser, noe som forbedrer lesbarhet og vedlikeholdbarhet av koden.

Sammendrag

Spring MVC forenkler utvikling av webapplikasjoner ved å separere forespørselshåndtering, applikasjonslogikk og visningsgenerering. Kontrollere, merket med annotasjonen @Controller eller @RestController, håndterer forespørsler og returnerer data for visning.

1. Hva gjør annotasjonen @Controller i Spring MVC?

2. Hvilken annotasjonsmetode brukes for å håndtere GET requests i Spring MVC?

question mark

Hva gjør annotasjonen @Controller i Spring MVC?

Select the correct answer

question mark

Hvilken annotasjonsmetode brukes for å håndtere GET requests i Spring MVC?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 3
some-alt