web.xml vs inicializátor s jarou

1. Prehľad

V tomto článku sa budeme venovať trom rôznym prístupom ku konfigurácii a DispatcherServlet k dispozícii v posledných verziách Jarný rámec:

  1. Začneme s XML konfigurácia a a web.xml spis
  2. Potom migrujeme deklaráciu servletu z web.xml súbor do konfigurácie Java, ale akúkoľvek inú konfiguráciu ponecháme v XML
  3. Nakoniec v treťom a poslednom kroku refaktoringu budeme mať 100% projekt nakonfigurovaný v prostredí Java

2. The DispatcherServlet

Jeden zo základných pojmov Jarné MVC je DispatcherServlet. Jarná dokumentácia to definuje ako:

Centrálny dispečer pre obsluhu / radiče požiadaviek HTTP, napr. pre radiče webových používateľských rozhraní alebo vývozcov vzdialených služieb založených na protokole HTTP. Odosiela registrovaným spracovateľom na spracovanie webovej požiadavky a poskytuje pohodlné vybavenie na mapovanie a spracovanie výnimiek.

V podstate DispatcherServlet je vstupným bodom každého Jarné MVC žiadosť. Jeho účelom je odpočúvanie HTTP žiadosti a odoslať ich správnemu komponentu, ktorý bude vedieť, ako s nimi naložiť.

3. Konfigurácia pomocou web.xml

Ak sa vysporiadate s dedičstvom Jar projekty je veľmi bežné nájsť XML konfigurácia a do Jar 3.1 jediný spôsob konfigurácie DispatcherServlet bol s WEB-INF / web.xml spis. V takom prípade sú potrebné dva kroky.

Pozrime sa na príklad konfigurácie - prvým krokom je deklarácia servletu:

 dispečer org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/dispatcher-config.xml 1 

S týmto blokom XML deklarujeme servlet, ktorý:

  1. Je pomenovaný "dispečer
  2. Je príkladom org.springframework.web.servlet.DispatcherServlet
  3. Bude inicializovaný s parametrom s názvom contextConfigLocation ktorý obsahuje cestu ku konfigurácii XML

zaťaženie pri štarte je celočíselná hodnota, ktorá určuje poradie načítania viacerých servletov. Takže ak potrebujete deklarovať viac ako jeden servlet, môžete určiť, v akom poradí budú inicializované. Servlety označené nižšími celými číslami sa načítajú pred servlety označené vyššími celými číslami.

Teraz je náš servlet nakonfigurovaný. Druhým krokom je vyhlásenie a mapovanie servletu:

 dispečer / 

Pomocou mapovania servletu ho ohraničujeme jeho menom na a URLvzor ktorá špecifikuje čo HTTP žiadosti bude vybavovať.

4. Hybridná konfigurácia

S prijatím verzie 3.0 z Servlet API, web.xml súbor sa stal voliteľným a teraz môžeme na konfiguráciu súboru DispatcherServlet.

Môžeme zaregistrovať servlet implementujúci a WebApplicationInitializer. Toto je ekvivalent XML konfigurácia vyššie:

public class MyWebAppInitializer implementuje WebApplicationInitializer {@Override public void onStartup (ServletContext container) {XmlWebApplicationContext context = nový XmlWebApplicationContext (); context.setConfigLocation ("/ WEB-INF / jar / dispečer-config.xml"); ServletRegistration.Dynamic dispečer = kontajner .addServlet ("dispečer", nový DispatcherServlet (kontext)); dispatcher.setLoadOnStartup (1); dispatcher.addMapping ("/"); }}

V tomto príklade sme:

  1. Vykonávanie WebApplicationInitializer rozhranie
  2. Prekonanie na začiatku metóda vytvoríme novú XmlWebApplicationContext nakonfigurovaný s rovnakým súborom ako contextConfigLocation na servlet v XML príklad
  3. Potom vytvárame inštanciu DispatcherServlet s novým kontextom, ktorý sme práve vytvorili
  4. A nakoniec registrujeme servlet s mapovaním URLvzor

Takže sme použili Java vyhlásiť servlet a naviazať ho na a Mapovanie URL ale konfiguráciu sme držali oddelene XML spis: dispečer-config.xml.

5. 100% Java Konfigurácia

S týmto prístupom je náš servlet deklarovaný v prostredí Java, ale stále potrebujeme XML súbor na jeho konfiguráciu. S WebApplicationInitializer môžete dosiahnuť 100% Java konfigurácia.

Pozrime sa, ako môžeme refaktorovať predchádzajúci príklad.

Prvá vec, ktorú musíme urobiť, je vytvoriť kontext aplikácie pre servlet.

Tentokrát použijeme kontext založený na anotáciách, aby sme ich mohli použiť Java a anotácie pre konfiguráciu a odstránenie potreby XML súbory ako dispečer-config.xml:

AnnotationConfigWebApplicationContext context = nový AnnotationConfigWebApplicationContext ();

Tento typ kontextu je potom možné nakonfigurovať tak, že sa zaregistruje konfiguračná trieda:

context.register (AppConfig.class);

Alebo nastavenie celého balíka, ktorý bude prehľadaný pre konfiguračné triedy:

context.setConfigLocation ("com.example.app.config");

Teraz, keď je vytvorený kontext našej aplikácie, môžeme do poslucháča pridať poslucháča ServletContext ktorý načíta kontext:

container.addListener (nový ContextLoaderListener (kontext));

Ďalším krokom je vytvorenie a registrácia nášho servletu dispečera:

ServletRegistration.Dynamic dispečer = kontajner .addServlet ("dispečer", nový DispatcherServlet (kontext)); dispatcher.setLoadOnStartup (1); dispatcher.addMapping ("/");

Teraz náš WebApplicationInitializer by mal vyzerať takto:

public class MyWebAppInitializer implementuje WebApplicationInitializer {@Override public void onStartup (ServletContext container) {AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext (); context.setConfigLocation ("com.example.app.config"); container.addListener (nový ContextLoaderListener (kontext)); ServletRegistration.Dynamic dispečer = kontajner .addServlet ("dispečer", nový DispatcherServlet (kontext)); dispatcher.setLoadOnStartup (1); dispatcher.addMapping ("/"); }}

Java a konfigurácia anotácií ponúka veľa výhod. Zvyčajne to vedie k kratšej a stručnejšej konfigurácii a anotácie poskytujú deklaráciám väčší kontext, pretože sú umiestnené spolu s kódom, ktorý konfigurujú.

Ale to nie je vždy výhodnejší alebo dokonca možný spôsob. Niektorí vývojári môžu napríklad uprednostňovať oddelenie svojho kódu a konfigurácie alebo možno budete musieť pracovať s kódom tretej strany, ktorý nemôžete upraviť.

6. Záver

V tomto článku sme sa zaoberali rôznymi spôsobmi konfigurácie a DispatcherServlet v Jar 3.2+ a je na vás, aby ste sa rozhodli, ktorú z nich použijete, na základe vašich preferencií. Jar vyhovie vášmu rozhodnutiu, nech si vyberiete čokoľvek.

Zdrojový kód z tohto článku nájdete na serveri Github tu a tu.


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