Adaptéry Handler na jar MVC

1. Prehľad

V tomto článku sa zameriame na rôzne implementácie adaptérov obslužných programov dostupné v rámci Spring.

2. Čo je adaptér Handler?

The HandlerAdapter je v podstate rozhranie, ktoré vo Spring MVC veľmi flexibilne uľahčuje spracovanie požiadaviek HTTP.

Používa sa v spojení s HandlerMapping, ktorý mapuje metódu na konkrétnu adresu URL.

The DispatcherServlet potom použije a HandlerAdapter na vyvolanie tejto metódy. Servlet nevyvoláva metódu priamo - slúži v podstate ako most medzi sebou a objektmi obslužnej rutiny, čo vedie k voľnému spojeniu.

Pozrime sa na rôzne metódy dostupné v tomto rozhraní:

verejné rozhranie HandlerAdapter {boolean podporuje (Object handler); Rukoväť ModelAndView (požiadavka HttpServletRequest, odpoveď HttpServletResponse, obsluha objektu) vyvolá výnimku; long getLastModified (požiadavka HttpServletRequest, obsluha objektov); }

The podporuje API sa používa na kontrolu, či je konkrétna inštancia obslužnej rutiny podporovaná alebo nie. Táto metóda by mala byť volaná ako prvá pred volaním rukoväť () metódy tohto rozhrania, aby ste sa uistili, či je inštancia obslužnej rutiny podporovaná alebo nie.

The zvládnuť API sa používa na vybavenie konkrétnej požiadavky HTTP. Táto metóda je zodpovedná za vyvolanie obslužnej rutiny odovzdaním znaku HttpServletRequest a HttpServletResponse objekt ako parameter. Obslužný program potom vykoná aplikačnú logiku a vráti a ModelAndView objekt, ktorý potom spracuje DispatcherServlet.

3. Maven závislosť

Začnime so závislosťou Maven, ku ktorej je potrebné pridať pom.xml:

 org.springframework spring-webmvc 5.2.8.RELEASE 

Najnovšia verzia jar-webmvc artefakt nájdete tu.

4. Druhy HandlerAdapter

4.1. SimpleControllerHandlerAdapter

Toto je predvolený adaptér pre obsluhu zaregistrovaný spoločnosťou Spring MVC. Zaoberá sa implementáciou tried Kontrolór rozhranie a slúži na postúpenie požiadavky na objekt radiča.

Ak webová aplikácia používa iba radiče, nemusíme konfigurovať žiadne HandlerAdapter pretože framework používa túto triedu ako predvolený adaptér na vybavenie žiadosti.

Poďme definovať jednoduchú triedu radiča pomocou staršieho štýlu radiča (implementácia Kontrolór rozhranie):

verejná trieda SimpleController implementuje Controller {@Override public ModelAndView handleRequest (požiadavka HttpServletRequest, odpoveď HttpServletResponse) vyvolá Exception {ModelAndView model = new ModelAndView ("Greeting"); model.addObject ("správa", "Dinesh Madhwal"); návratový model; }}

Podobná konfigurácia XML:

The BeanNameUrlHandlerMapping trieda je trieda mapovania pre tento adaptér obslužnej rutiny.

Poznámka: Ak je v BeanFactory, potom tento adaptér nie je automaticky zaregistrovaný. Musíme ho teda výslovne definovať v kontexte. Ak to nie je definované a my sme definovali vlastný adaptér obslužnej rutiny, dostaneme výnimku, ktorá hovorí, že nie je zadaný žiadny adaptér pre obslužnú rutinu.

4.2. SimpleServletHandlerAdapter

Tento adaptér manipulátora umožňuje použitie ľubovoľného Servlet pracovať s DispatcherServlet na vybavenie žiadosti. Preposiela žiadosť od DispatcherServlet na príslušné Servlet triedy volaním jeho služba () metóda.

Fazuľa, ktorá implementuje Servlet rozhranie automaticky spracúva tento adaptér. Nie je predvolene zaregistrovaný a musíme ho zaregistrovať ako každý iný normálny fazuľa v konfiguračnom súbore súboru DispatcherServlet:

4.3. AnnotationMethodHandlerAdapter

Táto trieda adaptéra sa používa na vykonávanie metód, ktoré sú anotované @RequestMapping anotácia. Používa sa na mapovanie metód založených na metódach HTTP a cestách HTTP.

Trieda mapovania pre tento adaptér je DefaultAnnotationHandlerMapping, ktorý sa používa na spracovanie @RequestMapping anotácia na úrovni typu a AnnotationMethodHandlerAdaptor sa používa na spracovanie na úrovni metódy.

Tieto dve triedy už rámec zaregistroval, keď DispatcherServlet je inicializovaný. Ak sú však už definované ďalšie adaptéry obslužných programov, musíme ich tiež definovať v konfiguračnom súbore.

Definujme triedu radiča:

@Controller public class AnnotationHandler {@RequestMapping ("/ annotedName") public ModelAndView getEmployeeName () {ModelAndView model = new ModelAndView ("Greeting"); model.addObject ("správa", "Dinesh"); návratový model; }}

The @ Kontrolór anotácia naznačuje, že táto trieda plní úlohu kontrolór.

The @RequestMapping anotácia mapuje getEmployeeName () metóda na URL /názov.

Existujú 2 rôzne spôsoby konfigurácie tohto adaptéra v závislosti od toho, či aplikácia používa konfiguráciu založenú na prostredí Java alebo XML. Pozrime sa na prvý spôsob použitia konfigurácie Java:

@ComponentScan ("com.baeldung.spring.controller") @Configuration @EnableWebMvc verejná trieda ApplicationConfiguration implementuje WebMvcConfigurer {@Bean public InternalResourceViewResolver jspViewResolver () {InternalResourceViewResolver bean = nový InternalResourceViewResolver) bean.setPrefix ("/ WEB-INF /"); bean.setSuffix (". jsp"); spätná fazuľa; }}

Ak aplikácia používa konfiguráciu XML, existujú dva rôzne prístupy ku konfigurácii tohto adaptéra obslužnej rutiny v kontexte XML webovej aplikácie. Pozrime sa na prvý prístup definovaný v súbore spring-servlet_AnnotationMethodHandlerAdapter.xml:

The tag sa používa na určenie balíka, ktorý sa má vyhľadať kontrolór triedy.

Pozrime sa na druhý prístup:

The Značka automaticky zaregistruje tieto dve triedy s jarným MVC. Podpora tohto adaptéra bola na jar 3.2 ukončená a bol nazvaný nový adaptér obslužnej rutiny RequestMappingHandlerAdapter bol predstavený na jar 3.1.

4.4. RequestMappingHandlerAdapter

Táto trieda adaptéra bola predstavená na jar 3.1 AnnotationMethodHandlerAdaptor adaptér manipulátora na jar 3.2.

Používa sa s RequestMappingHandlerMapping trieda, ktorá vykonáva metódy anotované pomocou @RequestMapping.

The RequestMappingHandlerMapping sa používa na udržiavanie mapovania URI požiadavky na obslužnú rutinu. Len čo sa psovod získa, DispatcherServlet odošle požiadavku na príslušný adaptér obslužnej rutiny, ktorý potom vyvolá handlerMethod ().

Mapovania na úrovni typov a metód boli v jarnej verzii pred 3.1 spracované v dvoch rôznych fázach.

Prvou etapou bolo výber ovládača pomocou DefaultAnnotationHandlerMapping a druhá etapa mala vyvolať skutočnú metódu pomocou AnnotationMethodHandlerAdapter.

Od jarnej verzie 3.1 existuje iba jedna etapa, ktorá spočíva v identifikácii radiča a metóde, ktorú je potrebné vyvolať pri spracovaní žiadosti.

Definujme jednoduchú triedu radiča:

@Controller public class RequestMappingHandler {@RequestMapping ("/ requestName") public ModelAndView getEmployeeName () {ModelAndView model = new ModelAndView ("Greeting"); model.addObject ("správa", "Madhwal"); návratový model; }}

Existujú 2 rôzne spôsoby konfigurácie tohto adaptéra v závislosti od toho, či aplikácia používa konfiguráciu založenú na prostredí Java alebo XML.

Pozrime sa na prvý spôsob použitia konfigurácie Java:

@ComponentScan ("com.baeldung.spring.controller") @Configuration @EnableWebMvc verejná trieda ServletConfig implementuje WebMvcConfigurer {@Bean public InternalResourceViewResolver jspViewResolver () {InternalResourceViewResolver bean = nový InternalResourceViewResolver bean.setPrefix ("/ WEB-INF /"); bean.setSuffix (". jsp"); spätná fazuľa; }}

Ak aplikácia používa konfiguráciu XML, existujú dva rôzne prístupy ku konfigurácii tohto adaptéra obslužnej rutiny v kontexte XML webovej aplikácie. Pozrime sa na prvý prístup definovaný v súbore spring-servlet_RequestMappingHandlerAdapter.xml:

A tu je druhý prístup:

Táto značka automaticky zaregistruje tieto dve triedy s Spring MVC.

Ak potrebujeme prispôsobiť RequestMappingHandlerMapping, potom musíme túto značku odstrániť z kontextu kontextu aplikácie XML a ručne ho nakonfigurovať v kontexte kontextu aplikácie XML.

4.5. HttpRequestHandlerAdapter

Tento adaptér obslužnej rutiny sa používa pre obslužné rutiny, ktoré spracovávajú HttpRequests. Vykonáva HttpRequestHandler rozhranie, ktoré obsahuje jeden handleRequest () metóda spracovania žiadosti a generovania odpovede.

Návratový typ tejto metódy je neplatný a negeneruje sa ModelAndView návratový typ vyrobený inými adaptérmi obslužnej rutiny. V zásade sa používa na generovanie binárnych odpovedí a negeneruje zobrazenie na vykreslenie.

5. Spustenie aplikácie

Ak je aplikácia nasadená dňa localhost s číslom portu 8082 a kontextový koreň je manipulátory jar-mvc:

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

6. Záver

V tomto článku sme diskutovali o rôznych typoch adaptérov obslužných programov dostupných v rámci Spring.

Väčšina vývojárov sa pravdepodobne bude držať predvolených nastavení, ale stojí za to pochopiť, ako flexibilný je rámec, keď musíme ísť nad rámec základných informácií.

Zdrojový kód tohto tutoriálu nájdete v projekte GitHub.


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