DispatcherServlet a web.xml v Spring Boot

1. Prehľad

The DispatcherServlet je predný ovládač vo webových aplikáciách Spring. Používa sa na vytváranie webových aplikácií a služieb REST v Spring MVC. V tradičnej webovej aplikácii Spring je tento servlet definovaný v web.xml spis.

V tomto tutoriáli migrujeme kód z web.xml podať do DispatcherServlet v aplikácii Spring Boot. Tiež zmapujeme Filtrovať, Servleta Poslucháč triedy od web.xml do aplikácie Spring Boot.

2. Závislosť od Maven

Najskôr musíme pridať spring-boot-starter-web Zlá závislosť na našej pom.xml spis:

 org.springframework.boot spring-boot-starter-web 

3. DispatcherServlet

DispatcherServlet prijíma všetky požiadavky HTTP a deleguje ich na triedy radičov.

Pred špecifikáciou Servlet 3.x DispatcherServlet by bol zaregistrovaný v web.xml súbor pre aplikáciu Spring MVC. Od špecifikácie Servlet 3.x môžeme servlety registrovať programovo pomocou ServletContainerInitializer.

Pozrime sa a DispatcherServlet príklad konfigurácie v web.xml spis:

 dispečer org.springframework.web.servlet.DispatcherServlet dispečer / 

Spring Boot poskytuje spring-boot-starter-web knižnica pre vývoj webových aplikácií pomocou Spring MVC. Jednou z hlavných funkcií Spring Boot je automatická konfigurácia. Automatická konfigurácia Spring Boot registruje a konfiguruje DispatcherServlet automaticky. Preto nemusíme registrovať DispatcherServlet ručne.

V predvolenom nastavení je spring-boot-starter-web konfigurácie štartéra DispatcherServlet do vzoru adresy URL „/“. Pre vyššie uvedené teda nemusíme dokončovať žiadnu ďalšiu konfiguráciu DispatcherServlet príklad v web.xml spis. Vzor adresy URL však môžeme prispôsobiť pomocou server.servlet.* v application.properties spis:

server.servlet.context-path = / demo spring.mvc.servlet.path = / baeldung

Vďaka týmto prispôsobeniam DispatcherServlet je nakonfigurovaný na spracovanie vzoru adresy URL / baeldung a koreň contextPath bude / demo. Teda DispatcherServlet počúva na // localhost: 8080 / demo / baeldung /.

4. Konfigurácia aplikácie

Jarné webové aplikácie MVC používajú web.xml súbor ako súbor deskriptora nasadenia. Tiež definuje mapovanie medzi cestami URL a servletmi v web.xml spis.

To už v prípade Spring Boot neplatí. Ak potrebujeme špeciálny filter, môžeme ho zaregistrovať v konfigurácii triedy Java. The web.xml súbor obsahuje filtre, servlety a poslucháčov.

Keď chceme migrovať z tradičnej Spring MVC na modernú aplikáciu Spring Boot, ako môžeme preniesť našu web.xml do novej aplikácie Spring Boot? V aplikáciách Spring Boot môžeme tieto koncepty pridať niekoľkými spôsobmi.

4.1. Registrácia a Filtrovať

Vytvorme filter implementáciou Filtrovať rozhranie:

@ Verejná trieda komponentu CustomFilter implementuje filter {Logger logger = LoggerFactory.getLogger (CustomFilter.class); @Override public void init (FilterConfig filterConfig) hodí ServletException {} @Override public void doFilter (požiadavka ServletRequest, odpoveď ServletResponse, reťazec FilterChain) hodí IOException, ServletException {logger.info ("je vyvolaný CustomFilter"); chain.doFilter (požiadavka, odpoveď); } // ďalšie metódy}

Bez Spring Boot by sme nakonfigurovali náš CustomFilterv web.xml spis:

 customFilter CustomFilter customFilter / * 

Aby program Spring Boot dokázal rozpoznať filter, bolo potrebné ho definovať ako fazuľu s @ Komponent anotácia.

4.2. Registrácia a Servlet

Definujeme servlet rozšírením HttpServlet trieda:

verejná trieda CustomServlet rozširuje HttpServlet {Logger logger = LoggerFactory.getLogger (CustomServlet.class); @Override protected void doGet (HttpServletRequest req, HttpServletResponse resp) vyvolá ServletException, IOException {logger.info ("je vyvolaná metóda CustomServlet doGet ()"); super.doGet (požiadavka, resp.); } @Override protected void doPost (HttpServletRequest req, HttpServletResponse resp) hodí ServletException, IOException {logger.info ("je vyvolaná metóda CustomServlet doPost ()"); super.doPost (req, resp); }} 

Bez Spring Boot by sme nakonfigurovali náš CustomServlet v web.xml spis:

 customServlet CustomServlet customServlet / servlet 

V aplikácii Spring Boot je servlet zaregistrovaný buď ako Spring @Bean alebo skenovaním @WebServlet anotované triedy s vloženým kontajnerom.

S jarou @Bean prístup, môžeme použiť ServletRegistrationBean triedy na registráciu servletu.

Takže definujeme CustomServlet ako fazuľa s ServletRegistrationBean trieda:

@Bean public ServletRegistrationBean customServletBean () {ServletRegistrationBean bean = nový ServletRegistrationBean (nový CustomServlet (), "/ servlet"); spätná fazuľa; } 

4.3. Registrácia a Poslucháč

Definujme poslucháča rozšírením ServletContextListener trieda:

verejná trieda CustomListener implementuje ServletContextListener {Logger logger = LoggerFactory.getLogger (CustomListener.class); @Override public void contextInitialized (ServletContextEvent sce) {logger.info ("CustomListener je inicializovaný"); } @Override public void contextDestroyed (ServletContextEvent sce) {logger.info ("CustomListener je zničený"); }} 

Bez Spring Boot by sme nakonfigurovali náš CustomListener v web.xml spis:

 CustomListener 

Na definovanie poslucháča v aplikácii Spring Boot môžeme použiť buď @Bean alebo @WebListener anotácie.

S jarou @Bean prístup, môžeme použiť ServletListenerRegistrationBean triedy zaregistrovať Poslucháč.

Poďme teda definovať CustomListener ako fazuľa s ServletListenerRegistrationBeantrieda:

@Bean public ServletListenerRegistrationBean customListenerBean () {ServletListenerRegistrationBean bean = nový ServletListenerRegistrationBean (); bean.setListener (nový CustomListener ()); spätná fazuľa; }

Po spustení našej aplikácie môžeme skontrolovať výstup protokolu a overiť, či bol poslucháč úspešne inicializovaný:

2020-09-28 08:50: 30.872 INFO 19612 --- [hlavný] c.baeldung.demo.listener.CustomListener: CustomListener je inicializovaný

5. Záver

V tomto rýchlom návode sme videli, ako to definovať DispatcherServlet a web.xml prvky vrátane filter, servleta poslucháč v aplikácii Spring Boot. A ako vždy, zdrojový kód pre vyššie uvedený príklad možno nájsť na GitHub.


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