web.xml vs Initializer with Spring
1. Áttekintés
Ebben a cikkben három különböző megközelítést tárgyalunk a DispatcherServlet elérhető a Tavaszi keret:
- Kezdjük egy XML konfiguráció és a web.xml fájl
- Ezután áttelepítjük a Servlet deklarációt a web.xml fájlt a Java konfigurációhoz, de minden más konfigurációt itt hagyunk XML
- Végül a refaktorozás harmadik és egyben utolsó lépésében lesz egy 100% Java-konfigurált projektünk
2. A DispatcherServlet
A Tavaszi MVC az a DispatcherServlet. A tavaszi dokumentáció a következőképpen határozza meg:
Központi diszpécser a HTTP kéréskezelőkhöz / vezérlőkhöz, pl. webes felhasználói felület-vezérlők vagy HTTP-alapú távoli szolgáltatás exportőrök számára. Küldemények regisztrált kezelőknek webkérés feldolgozása céljából, kényelmes térképészeti és kivételkezelési lehetőségek biztosítása mellett.
Alapvetően a DispatcherServlet mindegyik belépési pontja Tavaszi MVC Alkalmazás. Célja a lehallgatás HTTP kéréseket, és küldje el azokat a megfelelő komponensnek, amely tudja, hogyan kell kezelni.
3. Konfigurálás a web.xml
Ha örökséggel foglalkozol Tavaszi projekteket nagyon gyakran találni XML konfiguráció és addig Tavaszi 3.1 az egyetlen módja a DispatcherServlet volt a WEB-INF / web.xml fájl. Ebben az esetben két lépés szükséges.
Lássunk egy példát a konfigurációra - az első lépés a Servlet deklaráció:
diszpécser org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/dispatcher-config.xml 1
Ezzel a blokkjával XML egy szervletet deklarálunk, amely:
- A neve:diszpécser“
- Van egy példánya org.springframework.web.servlet.DispatcherServlet
- A nevezett paraméterrel inicializálásra kerül contextConfigLocation amely tartalmazza a konfiguráció elérési útját XML
indításkor történő betöltés egy egész érték, amely meghatározza a több szervlet betöltésének sorrendjét. Tehát, ha több szervletet kell deklarálnia, meghatározhatja, hogy melyik sorrendben inicializálják őket. Az alacsonyabb egész számokkal jelölt szervleteket a magasabb egész számokkal ellátott szervletek előtt töltjük be.
Most a szervletünk konfigurálva van. A második lépés az a kijelentése servlet feltérképezése:
diszpécser /
A servlet leképezéssel a nevével a URLminta hogy mit határoz meg HTTP a kéréseket az fogja kezelni.
4. Hibrid konfiguráció
A 3.0 verziójának elfogadásával Servlet API-k, a web.xml a fájl opcionális lett, és most a Java-t használhatjuk a DispatcherServlet.
Regisztrálhatunk egy szervletet, amely a WebApplicationInitializer. Ez egyenértékű a XML fenti konfiguráció:
public class MyWebAppInitializer implementálja a WebApplicationInitializer {@Override public void onStartup (ServletContext container) {XmlWebApplicationContext context = new XmlWebApplicationContext (); context.setConfigLocation ("/ WEB-INF / spring / diszpécser-config.xml"); ServletRegistration.Dynamic diszpécser = container .addServlet ("diszpécser", új DispatcherServlet (kontextus)); diszpécser.setLoadOnStartup (1); diszpécser.addMapping ("/"); }}
Ebben a példában:
- A WebApplicationInitializer felület
- A Indításkor módszerrel létrehozunk egy új XmlWebApplicationContext konfigurálva ugyanazzal a fájllal, amelyet átadtunk contextConfigLocation a szervlethez a XML példa
- Akkor létrehozunk egy példányát DispatcherServlet azzal az új kontextussal, amelyet csak példázottunk
- És végül regisztráljuk a servlet egy leképezéssel URLminta
Tehát használtuk Jáva kinyilvánítani a szervletet és kötni a URL leképezés de külön tartottuk a konfigurációt XML fájl: diszpécser-config.xml.
5. 100% Jáva Konfiguráció
Ezzel a megközelítéssel a szervletünk Java-ban van deklarálva, de még mindig szükségünk van egy XML fájlt a konfigurálásához. Val vel WebApplicationInitializer 100% -ot érhet el Jáva konfiguráció.
Lássuk, hogyan tudjuk visszafogni az előző példát.
Az első dolog, amit meg kell tennünk, az alkalmazás kontextusának létrehozása a szervlethez.
Ezúttal egy annotáción alapuló kontextust fogunk használni, hogy használhassuk Jáva és a konfigurációhoz tartozó kommentárokat, és feleslegessé teszi a XML fájlok, mint diszpécser-config.xml:
AnnotationConfigWebApplicationContext context = új AnnotationConfigWebApplicationContext ();
Ez a típusú kontextus ezután konfigurálható egy konfigurációs osztály regisztrálásával:
context.register (AppConfig.class);
Vagy állítson be egy teljes csomagot, amelyet a konfigurációs osztályok számára átvizsgálnak:
context.setConfigLocation ("com.example.app.config");
Most, hogy létrehoztuk az alkalmazáskörnyezetünket, felvehetünk egy hallgatót a ServletContext amely betölti a kontextust:
container.addListener (új ContextLoaderListener (context));
A következő lépés a diszpécser szervlet létrehozása és regisztrálása:
ServletRegistration.Dynamic diszpécser = container .addServlet ("diszpécser", új DispatcherServlet (kontextus)); diszpécser.setLoadOnStartup (1); diszpécser.addMapping ("/");
Most a mi WebApplicationInitializer így kell kinéznie:
public class MyWebAppInitializer implementálja a WebApplicationInitializer {@Override public void onStartup (ServletContext container) {AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext (); context.setConfigLocation ("com.example.app.config"); container.addListener (új ContextLoaderListener (context)); ServletRegistration.Dynamic diszpécser = container .addServlet ("diszpécser", új DispatcherServlet (kontextus)); diszpécser.setLoadOnStartup (1); diszpécser.addMapping ("/"); }}
Jáva és az annotációs konfiguráció sok előnyt kínál. Általában rövidebb és tömörebb konfigurációhoz vezet, és a kommentárok több kontextust biztosítanak a deklarációkhoz, mivel együtt vannak a konfigurált kóddal.
De ez nem mindig előnyös, sőt lehetséges módszer. Például egyes fejlesztők előnyben részesítik a kód és a konfiguráció szétválasztását, vagy előfordulhat, hogy olyan harmadik fél kódjával kell dolgoznia, amelyet nem módosíthat.
6. Következtetés
Ebben a cikkben a konfigurálás különböző módjait ismertettük DispatcherServlet ban ben 3,2+ tavasz és rajtad múlik, hogy melyiket használod a preferenciák alapján. Tavaszi bármilyen döntést figyelembe vesz a döntése során.
A Github e cikkének forráskódját itt és itt találja.