HandlerAdapters i Spring MVC

1. Oversikt

I denne artikkelen vil vi fokusere på de forskjellige implementeringene av adaptere som er tilgjengelige i Spring-rammeverket.

2. Hva er en håndteringsadapter?

De Handleradapter er i utgangspunktet et grensesnitt som letter håndtering av HTTP-forespørsler på en veldig fleksibel måte i Spring MVC.

Den brukes sammen med HandlerMapping, som tilordner en metode til en spesifikk URL.

De DispatcherServlet bruker deretter en Handleradapter å påkalle denne metoden. Servlet påkaller ikke metoden direkte - den fungerer i utgangspunktet som en bro mellom seg selv og handlerobjektene, noe som fører til et løst koblingsdesign.

La oss ta en titt på forskjellige metoder som er tilgjengelige i dette grensesnittet:

offentlig grensesnitt HandlerAdapter {boolean supports (Object handler); ModelAndView-håndtak (HttpServletRequest-forespørsel, HttpServletResponse-svar, Objektbehandler) kaster Unntak; lang getLastModified (HttpServletRequest forespørsel, Objektbehandler); }

De støtter API brukes til å sjekke om en bestemt behandlerforekomst støttes eller ikke. Denne metoden bør kalles først før du ringer til håndtak() metoden for dette grensesnittet, for å være sikker på om behandlerforekomsten støttes eller ikke.

De håndtak API brukes til å håndtere en bestemt HTTP-forespørsel. Denne metoden er ansvarlig for å påkalle håndtereren ved å passere HttpServletRequest og HttpServletResponse objekt som parameter. Behandleren utfører deretter applikasjonslogikken og returnerer a ModelAndView objekt, som deretter behandles av DispatcherServlet.

3. Maven avhengighet

La oss starte med Maven-avhengigheten som må legges til pom.xml:

 org.springframework spring-webmvc 5.2.8.RELEASE 

Den siste versjonen av vår-webmvc artefakt finner du her.

4. Typer av Handleradapter

4.1. SimpleControllerHandlerAdapter

Dette er standardadapteradapteren som er registrert av Spring MVC. Det handler om gjennomføring av klasser Kontroller grensesnitt og brukes til å videresende en forespørsel til et kontrollerobjekt.

Hvis et webapplikasjon bare bruker kontrollere, trenger vi ikke å konfigurere noen Handleradapter da rammeverket bruker denne klassen som standardadapter for å håndtere en forespørsel.

La oss definere en enkel kontrollerklasse ved å bruke den eldre stilen til kontrolleren (implementere Kontroller grensesnitt):

offentlig klasse SimpleController implementerer Controller {@Override offentlig ModelAndView handleRequest (HttpServletRequest-forespørsel, HttpServletResponse-svar) kaster Unntak {ModelAndView-modell = ny ModelAndView ("Hilsen"); model.addObject ("melding", "Dinesh Madhwal"); returmodell; }}

Lignende XML-konfigurasjon:

De BeanNameUrlHandlerMapping class er kartklassen for denne handleradapteren.

Merk: Hvis en tilpasset behandleradapter er definert i BeanFactory, da blir ikke denne adapteren automatisk registrert. Derfor må vi definere det eksplisitt i sammenhengen. Hvis den ikke er definert, og vi har definert en tilpasset behandleradapter, får vi et unntak som sier at ingen adapter for en behandler er spesifisert.

4.2. SimpleServletHandlerAdapter

Denne håndteringsadapteren tillater bruk av hvilken som helst Servlet å jobbe med DispatcherServlet for behandling av forespørselen. Den videresender forespørselen fra DispatcherServlet til det aktuelle Servlet klasse ved å kalle sin service() metode.

Bønnene som implementerer Servlet grensesnittet håndteres automatisk av denne adapteren. Det er ikke registrert som standard, og vi må registrere det som alle andre normale bønner i konfigurasjonsfilen til DispatcherServlet:

4.3. KommentarMethodHandlerAdapter

Denne adapterklassen brukes til å utføre metodene som er merket med @RequestMapping kommentar. Den brukes til å kartlegge metodene basert på HTTP-metoder og HTTP-stier.

Kartklassen for denne adapteren er StandardAnnotationHandlerMapping, som brukes til å behandle @RequestMapping kommentar på typenivå og KommentarMetodeHandlerAdaptor brukes til å behandle på metodenivå.

Disse to klassene er allerede registrert etter rammeverket når DispatcherServlet er initialisert. Imidlertid, hvis de andre håndtererkortene allerede er definert, må vi også definere det i konfigurasjonsfilen.

La oss definere en kontrollerklasse:

@Controller public class AnnotationHandler {@RequestMapping ("/ annotedName") public ModelAndView getEmployeeName () {ModelAndView model = new ModelAndView ("Greeting"); model.addObject ("melding", "Dinesh"); returmodell; }}

De @Kontrollør kommentar indikerer at denne klassen tjener rollen som kontrolleren.

De @RequestMapping merknader kartlegger getEmployeeName () metoden til URL-en /Navn.

Det er to forskjellige måter å konfigurere denne adapteren avhengig av om applikasjonen bruker Java-basert konfigurasjon eller XML-basert konfigurasjon. La oss se på den første måten ved hjelp av Java-konfigurasjon:

@ComponentScan ("com.baeldung.spring.controller") @Configuration @EnableWebMvc public class ApplicationConfiguration implementerer WebMvcConfigurer {@Bean public InternalResourceViewResolver jspViewResolver () {InternalResourceViewResolver bean = new InternalResourceView; bean.setPrefix ("/ WEB-INF /"); bean.setSuffix (". jsp"); retur bønne; }}

Hvis applikasjonen bruker XML-konfigurasjon, er det to forskjellige tilnærminger for å konfigurere denne håndtereradapteren i XML for nettapplikasjon. La oss ta en titt på den første tilnærmingen som er definert i filen spring-servlet_AnnotationMethodHandlerAdapter.xml:

De tag brukes til å spesifisere pakken du skal skanne etter kontrolleren klasser.

La oss ta en titt på den andre tilnærmingen:

De tag vil automatisk registrere disse to klassene med våren MVC. Denne adapteren ble avviklet våren 3.2, og en ny handleradapter ble kalt RequestMappingHandlerAdapter ble introdusert våren 3.1.

4.4. RequestMappingHandlerAdapter

Denne adapterklassen ble introdusert våren 3.1, og avskaffet KommentarMethodHandlerAdaptor adapter adapter våren 3.2.

Den brukes med RequestMappingHandlerMapping klasse, som utfører metoder som er merket med @RequestMapping.

De RequestMappingHandlerMapping brukes til å opprettholde kartleggingen av forespørsels-URI til behandleren. Når føreren er oppnådd, DispatcherServlet sender forespørselen til riktig behandleradapter, som deretter påkaller handlerMethod ().

Kartleggingen på typenivå og metodenivå ble behandlet i to forskjellige trinn i vårversjonen før 3.1.

Den første fasen var å velge kontrolleren innen StandardAnnotationHandlerMapping og den andre fasen var å påkalle den faktiske metoden ved KommentarMethodHandlerAdapter.

Fra vårversjon 3.1 er det bare ett trinn, som innebærer å identifisere kontrolleren, samt hvilken metode som må påkalles for å behandle forespørselen.

La oss definere en enkel kontrollerklasse:

@Controller public class RequestMappingHandler {@RequestMapping ("/ requestName") public ModelAndView getEmployeeName () {ModelAndView model = new ModelAndView ("Greeting"); model.addObject ("melding", "Madhwal"); returmodell; }}

Det er to forskjellige måter å konfigurere denne adapteren avhengig av om applikasjonen bruker Java-basert konfigurasjon eller XML-basert konfigurasjon.

La oss se på den første måten å bruke Java-konfigurasjon:

@ComponentScan ("com.baeldung.spring.controller") @Configuration @EnableWebMvc public class ServletConfig implementerer WebMvcConfigurer {@Bean public InternalResourceViewResolver jspViewResolver () {InternalResourceViewResolver bean = new InternalResource bean.setPrefix ("/ WEB-INF /"); bean.setSuffix (". jsp"); retur bønne; }}

Hvis applikasjonen bruker XML-konfigurasjon, er det to forskjellige tilnærminger for å konfigurere denne håndtereradapteren i XML for nettapplikasjon. La oss ta en titt på den første tilnærmingen som er definert i filen spring-servlet_RequestMappingHandlerAdapter.xml:

Og her er den andre tilnærmingen:

Denne taggen vil automatisk registrere disse to klassene med Spring MVC.

Hvis vi trenger å tilpasse RequestMappingHandlerMapping, da må vi fjerne denne taggen fra applikasjonskonteksten XML og konfigurere den manuelt i applikasjonssammenheng XML.

4.5. HttpRequestHandlerAdapter

Denne håndteringsadapteren brukes til håndtererne som behandler HttpForespørsels. Den implementerer HttpRequestHandler grensesnitt, som inneholder en enkelt handleRequest () metode for behandling av forespørselen og generering av svaret.

Returtypen for denne metoden er ugyldig, og den genereres ikke ModelAndView returtype som produsert av andre håndteringsadaptere. Det er i utgangspunktet brukt til å generere binære svar, og det genererer ikke en visning å gjengi.

5. Kjøre applikasjonen

Hvis applikasjonen er distribuert på lokal vert med portnummeret 8082 og kontekst-rot er vår-mvc-håndterere:

// localhost: 8082 / spring-mvc-handlers /

6. Konklusjon

I denne artikkelen diskuterte vi forskjellige typer håndtereradaptere som er tilgjengelige i Spring framework.

De fleste utviklere vil sannsynligvis holde seg til standardene, men det er vel verdt å forstå hvor fleksibelt rammeverket når vi trenger å gå utover det grunnleggende.

Kildekoden til denne veiledningen finner du i GitHub-prosjektet.


$config[zx-auto] not found$config[zx-overlay] not found