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:

  1. Kezdjük egy XML konfiguráció és a web.xml fájl
  2. 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
  3. 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:

  1. A neve:diszpécser
  2. Van egy példánya org.springframework.web.servlet.DispatcherServlet
  3. 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:

  1. A WebApplicationInitializer felület
  2. 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
  3. Akkor létrehozunk egy példányát DispatcherServlet azzal az új kontextussal, amelyet csak példázottunk
  4. É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.