web.xml vs inicijalizator s Springom

1. Pregled

U ovom ćemo članku pokriti tri različita pristupa konfiguriranju a DispatcherServlet dostupno u novijim verzijama Proljetni okvir:

  1. Počet ćemo s XML konfiguracija i a web.xml datoteka
  2. Tada ćemo migrirati deklaraciju Servlet iz web.xml datoteku u Java config, no bilo koju drugu konfiguraciju ostavit ćemo u XML
  3. Napokon, u trećem i posljednjem koraku refaktoriranja imat ćemo 100% konfiguriran Java projekt

2. The DispatcherServlet

Jedan od temeljnih koncepata Proljetni MVC je DispatcherServlet. Proljetna dokumentacija definira ga kao:

Središnji dispečer za rukovatelje / kontrolere HTTP zahtjeva, na pr. za web kontrolere korisničkog sučelja ili izvoznike udaljenih usluga temeljenih na HTTP-u. Pošiljke registriranim rukovateljima za obradu web zahtjeva, pružajući prikladne mogućnosti mapiranja i rukovanja iznimkama.

U osnovi DispatcherServlet je ulazna točka svakog Proljetni MVC primjena. Njegova je svrha presretanje HTTP zahtjeve i otpremiti ih na pravu komponentu koja će znati kako to riješiti.

3. Konfiguracija pomoću web.xml

Ako se bavite nasljeđem Proljeće vrlo često se mogu naći projekti XML konfiguracija i do Proljeće 3.1 jedini način za konfiguriranje DispatcherServlet bio s WEB-INF / web.xml datoteka. U ovom su slučaju potrebna dva koraka.

Pogledajmo primjer konfiguracije - prvi korak je deklaracija Servlet:

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

Ovim blokom XML deklariramo servlet koji:

  1. Je nazvan “dispečer
  2. Je li primjerak org.springframework.web.servlet.DispatcherServlet
  3. Bit će inicijaliziran parametrom s imenom contextConfigLocation koji sadrži put do konfiguracije XML

load-on-startup je cijela vrijednost koja specificira redoslijed učitavanja više servleta. Dakle, ako trebate prijaviti više servleta, možete definirati kojim redoslijedom će se inicijalizirati. Servleti označeni nižim cijelim brojevima učitavaju se prije servleta označenih višim cijelim brojevima.

Sada je naš servlet konfiguriran. Drugi korak je proglašavanje a mapiranje servleta:

 dispečer / 

Mapiranjem servleta ograničavamo ga svojim imenom na a URLuzorak koja precizira što HTTP zahtjevi će se obrađivati.

4. Hibridna konfiguracija

Usvajanjem verzije 3.0 API-ji za servlet, web.xml datoteka postala je neobavezna i sada možemo koristiti Java za konfiguriranje datoteke DispatcherServlet.

Možemo registrirati servlet koji implementira WebApplicationInitializer. Ovo je ekvivalent XML gornja konfiguracija:

javna klasa MyWebAppInitializer provodi WebApplicationInitializer {@Override public void onStartup (spremnik ServletContext) {XmlWebApplicationContext context = new XmlWebApplicationContext (); context.setConfigLocation ("/ WEB-INF / spring / depecher-config.xml"); ServletRegistration.Dynamic dispečer = spremnik .addServlet ("dispečer", novi DispatcherServlet (kontekst)); dispečer.setLoadOnStartup (1); dispečer.addMapping ("/"); }}

U ovom primjeru smo:

  1. Provođenje WebApplicationInitializer sučelje
  2. Nadjačavanje Na početku metoda stvaramo novu XmlWebApplicationContext konfiguriran s istom datotekom proslijeđenom kao contextConfigLocation na servlet u XML primjer
  3. Tada stvaramo primjerak DispatcherServlet s novim kontekstom koji smo upravo napravili
  4. I na kraju registriramo servlet mapiranjem URLuzorak

Pa smo koristili Java da proglasi servlet i veže ga za a Mapiranje URL-a ali smo konfiguraciju držali odvojeno XML datoteka: dispečer-config.xml.

5. 100% Java Konfiguracija

Ovim pristupom naš je servlet deklariran u Javi, ali još uvijek trebamo XML datoteku za njegovo konfiguriranje. S WebApplicationInitializer možete postići 100% Java konfiguracija.

Pogledajmo kako možemo refaktorizirati prethodni primjer.

Prvo što ćemo morati napraviti je stvoriti kontekst aplikacije za servlet.

Ovaj ćemo put upotrijebiti kontekst zasnovan na bilješkama kako bismo mogli koristiti Java i napomene za konfiguraciju i uklanjaju potrebu za XML datoteke poput dispečer-config.xml:

AnnotationConfigWebApplicationContext context = novo AnnotationConfigWebApplicationContext ();

Tada se može konfigurirati ova vrsta konteksta registriranjem klase konfiguracije:

context.register (AppConfig.class);

Ili postavljanje cijelog paketa koji će se skenirati radi klasa konfiguracije:

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

Sada kada je stvoren kontekst naše aplikacije, možemo dodati slušatelja u ServletContext koji će učitati kontekst:

container.addListener (novi ContextLoaderListener (kontekst));

Sljedeći je korak stvaranje i registracija našeg servleta za dispečere:

ServletRegistration.Dynamic dispečer = spremnik .addServlet ("dispečer", novi DispatcherServlet (kontekst)); dispečer.setLoadOnStartup (1); dispečer.addMapping ("/");

Sada naš WebApplicationInitializer treba izgledati ovako:

javna klasa MyWebAppInitializer provodi WebApplicationInitializer {@Override public void onStartup (spremnik ServletContext) {AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext (); context.setConfigLocation ("com.example.app.config"); container.addListener (novi ContextLoaderListener (kontekst)); ServletRegistration.Dynamic dispečer = spremnik .addServlet ("dispečer", novi DispatcherServlet (kontekst)); dispečer.setLoadOnStartup (1); dispečer.addMapping ("/"); }}

Java a konfiguracija bilješki nudi brojne prednosti. To obično dovodi do kraće i sažetije konfiguracije, a bilješke pružaju više konteksta deklaracijama, jer se nalaze zajedno s kodom koji oni konfiguriraju.

Ali to nije uvijek poželjniji ili čak mogući način. Na primjer, neki programeri možda više vole držati svoj kôd i konfiguraciju odvojenim, ili ćete možda morati raditi s kodom treće strane koji ne možete izmijeniti.

6. Zaključak

U ovom smo članku pokrili različite načine konfiguriranja a DispatcherServlet u Proljeće 3.2+ a na vama je da odlučite koji ćete koristiti na temelju svojih preferencija. Proljeće prilagodit će vašoj odluci sve što odaberete.

Izvorni kod iz ovog članka o Githubu možete pronaći ovdje i ovdje.