HandlerAdapterek a tavaszi MVC-ben

1. Áttekintés

Ebben a cikkben a tavaszi keretben elérhető különféle kezelőadapter-megoldásokra fogunk koncentrálni.

2. Mi a Handleradapter?

A HandlerAdapter alapvetően egy interfész, amely nagyon rugalmas módon megkönnyíti a HTTP kérések kezelését a Spring MVC-ben.

A .val együtt használják HandlerMapping, amely egy metódust egy adott URL-hez társít.

A DispatcherServlet majd a HandlerAdapter hogy erre a módszerre hivatkozhasson. A servlet nem közvetlenül hivatkozik a módszerre - alapvetően hídként szolgál önmagának és a kezelő objektumok között, ami lazán összekapcsolódó kialakításhoz vezet.

Vessünk egy pillantást az ezen a felületen elérhető különféle módszerekre:

nyilvános felület HandlerAdapter {logikai támogatások (Object handler); A ModelAndView fogantyú (HttpServletRequest kérés, HttpServletResponse válasz, Objektumkezelő) dobja a Kivételt; hosszú getLastModified (HttpServletRequest kérés, objektumkezelő); }

A támogatja Az API segítségével ellenőrizhető, hogy egy adott kezelő példány támogatott-e vagy sem. Ezt a módszert először a fogantyú() ennek az interfésznek a módszere, annak biztosítása érdekében, hogy a kezelő példány támogatott-e vagy sem.

A fogantyú Az API egy adott HTTP kérés kezelésére szolgál. Ez a módszer felelős a kezelő meghívásáért a HttpServletRequest és HttpServletResponse objektum paraméterként. Ezután a kezelő végrehajtja az alkalmazás logikáját, és visszaadja a ModelAndView objektum, amelyet azután a DispatcherServlet.

3. Maven-függőség

Kezdjük azzal a Maven-függőséggel, amelyhez hozzá kell adni pom.xml:

 org.springframework spring-webmvc 5.2.8.KÖZLEMÉNY 

A legújabb verzió a tavasz-webmvc műtárgy itt található.

4. Típusai HandlerAdapter

4.1. SimpleControllerHandlerAdapter

Ez az alapértelmezett kezelőadapter, amelyet a Spring MVC regisztrált. Osztályok végrehajtásával foglalkozik Vezérlő interfész és egy kérés továbbítására szolgál egy vezérlőobjektumhoz.

Ha egy webalkalmazás csak vezérlőket használ, akkor ezeket nem kell konfigurálnunk HandlerAdapter mivel a keretrendszer ezt az osztályt használja alapértelmezett adapterként egy kérés kezeléséhez.

Definiáljunk egy egyszerű vezérlő osztályt, a régebbi vezérlő stílus használatával (a Vezérlő felület):

public class SimpleController implementálja a Controller {@Override public ModelAndView handleRequest (HttpServletRequest kérés, HttpServletResponse válasz) dobja a Kivételt {ModelAndView model = new ModelAndView ("Üdvözlet"); model.addObject ("üzenet", "Dinesh Madhwal"); visszatérési modell; }}

A hasonló XML konfiguráció:

A BeanNameUrlHandlerMapping osztály ennek a kezelő adapternek a leképezési osztálya.

jegyzet: Ha egy egyedi kezelő adapter van meghatározva a BeanFactory, akkor ez az adapter nincs automatikusan regisztrálva. Így kifejezetten meg kell határoznunk a kontextusban. Ha nincs meghatározva, és meghatároztunk egy egyedi kezelőadaptert, akkor kapunk egy kivételt, amely azt mondja, hogy nincs megadva adapter a kezelőhöz.

4.2. SimpleServletHandlerAdapter

Ez a kezelő adapter lehetővé teszi bármelyik használatát Servlet valakivel együtt dolgozni DispatcherServlet a kérelem kezelésére. A továbbítja a kérelmet DispatcherServlet a megfelelőnek Servlet osztály hívásával annak szolgáltatás() módszer.

A babot, amely megvalósítja a Servlet interfészt automatikusan kezeli ez az adapter. Alapértelmezés szerint nincs regisztrálva, és regisztrálnunk kell, mint bármely más normál babot a DispatcherServlet:

4.3. AnnotationMethodHandlerAdapter

Ezt az illesztőosztályt használják a jegyzetekkel ellátott módszerek végrehajtására @RequestMapping annotáció. A módszerek feltérképezésére szolgál HTTP módszerek és HTTP útvonalak alapján.

Ennek az adapternek a leképezési osztálya: DefaultAnnotationHandlerMapping, amely a feldolgozására szolgál @RequestMapping - annotáció típusszinten és AnnotationMethodHandlerAdaptor metódus szintű feldolgozásra szolgál.

Ezt a két osztályt már regisztrálta a keretrendszer, amikor a DispatcherServlet inicializálva van. Ha azonban a többi kezelő adapter már meg van határozva, akkor azt a konfigurációs fájlban is meg kell határoznunk.

Határozzunk meg egy vezérlő osztályt:

@Controller public class AnnotationHandler {@RequestMapping ("/ annotedName") public ModelAndView getEmployeeName () {ModelAndView model = new ModelAndView ("Greeting"); model.addObject ("üzenet", "Dinesh"); visszatérési modell; }}

A @Vezérlő az annotáció azt jelzi, hogy ez az osztály a vezérlő.

A @RequestMapping annotáció feltérképezi a getEmployeeName () metódus az URL-hez /név.

Az adapter konfigurálásának két különböző módja van attól függően, hogy az alkalmazás Java-alapú vagy XML-alapú konfigurációt használ-e. Nézzük meg a Java konfiguráció használatának első módját:

@ComponentScan ("com.baeldung.spring.controller") @Configuration @EnableWebMvc nyilvános osztály Az ApplicationConfiguration megvalósítja a WebMvcConfigurer {@Bean public InternalResourceViewResolver jspViewResolver () {InternalResourceViewResolver bean = new InternalResource bean.setPrefix ("/ WEB-INF /"); bean.setSuffix (". jsp"); visszatérő bab; }}

Ha az alkalmazás XML-konfigurációt használ, akkor kétféle megközelítés áll rendelkezésre a kezelőadapter webalkalmazás-kontextusú XML-ben történő konfigurálásához. Vessünk egy pillantást a fájlban definiált első megközelítésre spring-servlet_AnnotationMethodHandlerAdapter.xml:

A tag segítségével megadható a keresendő csomag vezérlő osztályok.

Vessünk egy pillantást a második megközelítésre:

A tag automatikusan regisztrálja ezt a két osztályt a tavaszi MVC-n. Ez az adapter a 3.2 tavasszal elavult, és egy új kezelő adaptert hívtak RequestMappingHandlerAdapter 3.1 tavaszán vezették be.

4.4. RequestMappingHandlerAdapter

Ezt az adapterosztályt a 3.1 tavasszal vezették be, megszüntetve a AnnotationMethodHandlerAdaptor kezelő adapter rugóban 3.2.

Ezzel használják RequestMappingHandlerMapping osztály, amely -vel kommentált módszereket hajt végre @RequestMapping.

A RequestMappingHandlerMapping a kérelem URI kezelőhöz való hozzárendelésének fenntartására szolgál. A kezelő megszerzése után a DispatcherServlet elküldi a kérést a megfelelő kezelő adapterhez, amely ezután meghívja a handlerMethod ().

A típusszintű és a módszerszintű leképezéseket a Spring előtti verzióban a 3.1 előtt két különböző szakaszban dolgozták fel.

Az első lépés a vezérlő kiválasztása volt DefaultAnnotationHandlerMapping a második szakasz pedig a tényleges módszer meghívása volt AnnotationMethodHandlerAdapter.

A tavaszi 3.1 verziótól kezdve csak egy szakasz létezik, amely magában foglalja a vezérlő azonosítását, valamint azt, hogy melyik módszert kell meghívni a kérés feldolgozásához.

Definiáljunk egy egyszerű vezérlő osztályt:

@Controller public class RequestMappingHandler {@RequestMapping ("/ requestName") public ModelAndView getEmployeeName () {ModelAndView model = new ModelAndView ("Greeting"); model.addObject ("üzenet", "Madhwal"); visszatérési modell; }}

Az adapter konfigurálásának két különböző módja van attól függően, hogy az alkalmazás Java-alapú vagy XML-alapú konfigurációt használ-e.

Nézzük meg a Java konfiguráció használatának első módját:

@ComponentScan ("com.baeldung.spring.controller") @Configuration @EnableWebMvc nyilvános osztály A ServletConfig megvalósítja a WebMvcConfigurer {@Bean public InternalResourceViewResolver jspViewResolver () {InternalResourceViewResolver bean = new InternalResver bean.setPrefix ("/ WEB-INF /"); bean.setSuffix (". jsp"); visszatérő bab; }}

Ha az alkalmazás XML-konfigurációt használ, akkor kétféle megközelítés áll rendelkezésre a kezelőadapter webalkalmazás-kontextusú XML-ben történő konfigurálásához. Vessünk egy pillantást a fájlban definiált első megközelítésre spring-servlet_RequestMappingHandlerAdapter.xml:

És íme a második megközelítés:

Ez a címke automatikusan regisztrálja ezt a két osztályt a Spring MVC-nél.

Ha testre kell szabnunk a RequestMappingHandlerMapping, akkor el kell távolítanunk ezt a címkét az alkalmazáskörnyezet XML-jéből, és manuálisan kell konfigurálnunk az alkalmazáskörnyezet XML-jében.

4.5. HttpRequestHandlerAdapter

Ezt a kezelőadaptert a feldolgozók kezelik HttpRequests. Megvalósítja a HttpRequestHandler felület, amely egyetlen handleRequest () módszer a kérés feldolgozására és a válasz generálására.

A metódus visszatérési típusa érvénytelen és nem generál ModelAndView visszatérési típus, amelyet más kezelő adapterek gyártanak. Alapjában véve bináris válaszok generálására szolgál, és nem generál renderelt nézetet.

5. Az alkalmazás futtatása

Ha az alkalmazás be van telepítve helyi kiszolgáló a portszámmal 8082 és a kontextus-gyökér az rugós-mvc-kezelők:

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

6. Következtetés

Ebben a cikkben megvitattuk a Spring keretben elérhető különféle típusú adaptereket.

A legtöbb fejlesztő valószínűleg ragaszkodik az alapértelmezésekhez, de érdemes megérteni, mennyire rugalmas a keretrendszer, ha túl kell lépnünk az alapokon.

Az oktatóanyag forráskódja a GitHub projektben található.


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