Spring 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
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
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
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
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
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
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
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?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
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
Spring 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
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
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
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
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
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
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
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?
Takk for tilbakemeldingene dine!