Handleradaptere i Spring MVC

1. Oversigt

I denne artikel vil vi fokusere på de forskellige implementeringer af handleradaptere, der er tilgængelige i foråret.

2. Hvad er en håndteringsadapter?

Det Handler-adapter er dybest set en grænseflade, der letter håndtering af HTTP-anmodninger på en meget fleksibel måde i Spring MVC.

Det bruges i forbindelse med HandlerMapping, som kortlægger en metode til en bestemt URL.

Det DispatcherServlet bruger derefter en Handler-adapter at påberåbe sig denne metode. Servlet påkalder ikke metoden direkte - den fungerer grundlæggende som en bro mellem sig selv og handlerobjekterne, hvilket fører til et løst koblingsdesign.

Lad os se på forskellige metoder, der er tilgængelige i denne grænseflade:

offentlig grænseflade HandlerAdapter {boolean understøtter (Objektbehandler); ModelAndView-håndtag (HttpServletRequest-anmodning, HttpServletResponse-svar, Objektbehandler) kaster Undtagelse; lang getLastModified (HttpServletRequest anmodning, Objektbehandler); }

Det bakker op API bruges til at kontrollere, om en bestemt handlerinstans understøttes eller ej. Denne metode skal kaldes først, inden du ringer til håndtere() metode til denne grænseflade for at sikre, om handlerinstansen understøttes eller ej.

Det håndtere API bruges til at håndtere en bestemt HTTP-anmodning. Denne metode er ansvarlig for at påkalde handleren ved at passere HttpServletRequest og HttpServletResponse objekt som parameter. Handleren udfører derefter applikationslogikken og returnerer en ModelAndView objekt, som derefter behandles af DispatcherServlet.

3. Maven-afhængighed

Lad os starte med den Maven-afhængighed, der skal føjes til pom.xml:

 org.springframework spring-webmvc 5.2.8.RELEASE 

Den seneste version af fjeder-webmvc artefakt kan findes her.

4. Typer af Handler-adapter

4.1. SimpleControllerHandlerAdapter

Dette er standardhåndteringsadapteren, der er registreret af Spring MVC. Det beskæftiger sig med gennemførelse af klasser Controller interface og bruges til at videresende en anmodning til et controller-objekt.

Hvis en webapplikation kun bruger controllere, behøver vi ikke konfigurere nogen Handler-adapter da rammen bruger denne klasse som standardadapter til håndtering af en anmodning.

Lad os definere en simpel controller-klasse ved hjælp af den ældre type controller (implementering af Controller interface):

offentlig klasse SimpleController implementerer Controller {@Override offentlig ModelAndView handleRequest (HttpServletRequest anmodning, HttpServletResponse svar) kaster Undtagelse {ModelAndView model = ny ModelAndView ("Hilsen"); model.addObject ("besked", "Dinesh Madhwal"); returmodel; }}

Den lignende XML-konfiguration:

Det BeanNameUrlHandlerMapping class er kortklassen for denne handleradapter.

Bemærk: Hvis der er defineret en tilpasset handleradapter i BønneFabrik, så registreres denne adapter ikke automatisk. Derfor er vi nødt til at definere det eksplicit i sammenhængen. Hvis det ikke er defineret, og vi har defineret en tilpasset handleradapter, får vi en undtagelse, der siger, at der ikke er angivet nogen adapter til en handler.

4.2. SimpleServletHandlerAdapter

Denne handleradapter muliggør brug af enhver Servlet at arbejde med DispatcherServlet til behandling af anmodningen. Den videresender anmodningen fra DispatcherServlet til det relevante Servlet klasse ved at kalde sin service() metode.

De bønner, der implementerer Servlet interface håndteres automatisk af denne adapter. Det er ikke registreret som standard, og vi skal registrere det som enhver anden normal bønne i konfigurationsfilen til DispatcherServlet:

4.3. AnnotationMethodHandlerAdapter

Denne adapterklasse bruges til at udføre de metoder, der er kommenteret @RequestMapping kommentar. Det bruges til at kortlægge metoderne baseret på HTTP-metoder og HTTP-stier.

Kortklassen for denne adapter er StandardAnnotationHandlerMapping, som bruges til at behandle @RequestMapping kommentar på typeniveau og AnnotationMethodHandlerAdaptor bruges til at behandle på metodeniveau.

Disse to klasser er allerede registreret af rammen, når DispatcherServlet er initialiseret. Men hvis de andre handleradaptere allerede er defineret, skal vi også definere det i konfigurationsfilen.

Lad os definere en controller-klasse:

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

Det @Kontrol kommentar indikerer, at denne klasse tjener rollen som controller.

Det @RequestMapping annotation kortlægger getEmployeeName () metode til URL'en /navn.

Der er 2 forskellige måder at konfigurere denne adapter på, afhængigt af om applikationen bruger Java-baseret konfiguration eller XML-baseret konfiguration. Lad os se på den første måde ved hjælp af Java-konfiguration:

@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 applikationen bruger XML-konfiguration, er der to forskellige tilgange til konfiguration af denne håndteringsadapter i XML-applikationskontekst. Lad os se på den første tilgang, der er defineret i filen spring-servlet_AnnotationMethodHandlerAdapter.xml:

Det tag bruges til at specificere den pakke, der skal scannes efter controller klasser.

Lad os se på den anden tilgang:

Det tag registrerer automatisk disse to klasser med fjeder MVC. Denne adapter blev udfaset i foråret 3.2, og en ny handleradapter blev kaldt RequestMappingHandlerAdapter blev introduceret i foråret 3.1.

4.4. RequestMappingHandlerAdapter

Denne adapterklasse blev introduceret i foråret 3.1, hvilket udfasede AnnotationMethodHandlerAdaptor adapter til foråret 3.2.

Det bruges med RequestMappingHandlerMapping klasse, hvilken udfører metoder, der er kommenteret med @RequestMapping.

Det RequestMappingHandlerMapping bruges til at opretholde kortlægningen af ​​anmodnings-URI til handleren. Når handleren er opnået, DispatcherServlet sender anmodningen til den relevante handleradapter, som derefter påberåber sig handlerMethod ().

Kortlægningerne på typeniveau og metodeniveau blev behandlet i to forskellige faser i Spring-versionen før 3.1.

Den første fase var at vælge controlleren ved StandardAnnotationHandlerMapping og det andet trin var at påberåbe sig den egentlige metode ved AnnotationMethodHandlerAdapter.

Fra Spring version 3.1 er der kun et trin, der involverer identifikation af controlleren, samt hvilken metode der skal påberåbes for at behandle anmodningen.

Lad os definere en simpel controller-klasse:

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

Der er 2 forskellige måder at konfigurere denne adapter på, afhængigt af om applikationen bruger Java-baseret konfiguration eller XML-baseret konfiguration.

Lad os se på den første måde ved hjælp af Java-konfiguration:

@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 applikationen bruger XML-konfiguration, er der to forskellige tilgange til konfiguration af denne håndteringsadapter i XML med webapplikation. Lad os se på den første tilgang, der er defineret i filen spring-servlet_RequestMappingHandlerAdapter.xml:

Og her er den anden tilgang:

Dette tag registrerer automatisk disse to klasser med Spring MVC.

Hvis vi har brug for at tilpasse RequestMappingHandlerMapping, så er vi nødt til at fjerne dette tag fra applikationskonteksten XML og manuelt konfigurere det i applikationskonteksten XML.

4.5. HttpRequestHandlerAdapter

Denne handleradapter bruges til de behandlere, der behandler HttpForespørgsels. Det implementerer HttpRequestHandler interface, der indeholder en enkelt handleRequest () metode til behandling af anmodningen og generering af svaret.

Returtypen for denne metode er ugyldig, og den genereres ikke ModelAndView returtype som produceret af andre handleradaptere. Det bruges dybest set til at generere binære svar, og det genererer ikke en visning, der skal gengives.

5. Kørsel af applikationen

Hvis applikationen er implementeret den lokal vært med portnummeret 8082 og kontekst-rod er spring-mvc-handlers:

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

6. Konklusion

I denne artikel diskuterede vi forskellige typer adaptere, der var tilgængelige i foråret.

De fleste udviklere vil sandsynligvis holde sig til standardindstillingerne, men det er værd at forstå, hvor fleksibel rammen er, når vi skal gå ud over det grundlæggende.

Kildekoden til denne vejledning kan findes i GitHub-projektet.


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