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.