DispatcherServlet i web.xml u Spring Boot-u

1. Pregled

The DispatcherServlet je prednji kontroler u web aplikacijama Spring. Koristi se za stvaranje web aplikacija i REST usluga u Spring MVC. U tradicionalnoj web aplikaciji Spring, ovaj je servlet definiran u web.xml datoteka.

U ovom uputstvu migrirat ćemo kôd iz a web.xml podnijeti na DispatcherServlet u aplikaciji Spring Boot. Također ćemo mapirati filtar, Servlet, i Slušatelj razredi iz web.xml aplikaciji Spring Boot.

2. Ovisnost Mavena

Prvo, moramo dodati proljeće-boot-starter-web Mavenova ovisnost o našoj pom.xml datoteka:

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

3. DispatcherServlet

DispatcherServlet prima sve HTTP zahtjeve i delegira ih u klase kontrolora.

Prije specifikacije Servlet 3.x, DispatcherServlet bi bili registrirani u web.xml datoteka za Spring MVC aplikaciju. Od Servlet 3.x specifikacije, servlete možemo registrirati programski koristeći ServletContainerInitializer.

Da vidimo a DispatcherServlet primjer konfiguracije u web.xml datoteka:

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

Spring Boot nudi proljeće-boot-starter-web knjižnica za razvoj web aplikacija pomoću Spring MVC-a. Jedna od glavnih značajki Spring Boota je automatska konfiguracija. Autokonfiguracija Spring Boot registrira i konfigurira DispatcherServlet automatski. Stoga ne moramo registrirati DispatcherServlet ručno.

Prema zadanim postavkama proljeće-boot-starter-web starter konfigurira DispatcherServlet na obrazac URL-a “/”. Dakle, ne trebamo dovršiti bilo kakvu dodatnu konfiguraciju za gore navedeno DispatcherServlet primjer u web.xml datoteka. Međutim, možemo prilagoditi obrazac URL-a pomoću poslužitelj.servlet.* u primjena.svojstva datoteka:

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

Uz ove prilagodbe, DispatcherServlet je konfiguriran za obradu uzorka URL-a / baeldung i korijen contextPath bit će /demo. Tako, DispatcherServlet sluša na // localhost: 8080 / demo / baeldung /.

4. Konfiguracija aplikacije

Proljetni MVC web programi koriste web.xml datoteka kao datoteka deskriptora implementacije. Također, definira preslikavanje između staza URL-a i servleta u web.xml datoteka.

To više nije slučaj s Spring Bootom. Ako nam treba poseban filtar, možemo ga registrirati u konfiguraciji Java klase. The web.xml datoteka uključuje filtre, servlete i preslušavače.

Kada želimo migrirati s tradicionalnog Spring MVC-a na modernu aplikaciju Spring Boot, kako možemo prenijeti svoj web.xml na novu aplikaciju Spring Boot? U programima Spring Boot te pojmove možemo dodati na nekoliko načina.

4.1. Registriranje a filtar

Stvorimo filtar primjenom filtar sučelje:

@Component javna klasa CustomFilter implementira Filter {Logger logger = LoggerFactory.getLogger (CustomFilter.class); @Override public void init (FilterConfig filterConfig) baca ServletException {} @Override public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain) baca IOException, ServletException {logger.info ("CustomFilter is invoked" chain.doFilter (zahtjev, odgovor); } // ostale metode}

Bez Spring Boota konfigurirali bismo svoj CustomFilteru web.xml datoteka:

 customFilter CustomFilter customFilter / * 

Da bi Spring Boot mogao prepoznati filtar, samo smo ga trebali definirati kao grah s @Komponenta bilješka.

4.2. Registriranje a Servlet

Definirajmo servlet proširujući HttpServlet razred:

javna klasa CustomServlet proširuje HttpServlet {Logger logger = LoggerFactory.getLogger (CustomServlet.class); @Override zaštićen void doGet (HttpServletRequest req, HttpServletResponse resp) baca ServletException, IOException {logger.info ("poziva se metoda CustomServlet doGet ()"); super.doGet (req, resp); } @Override void doPost zaštićen (HttpServletRequest req, HttpServletResponse resp) baca ServletException, IOException {logger.info ("poziva se metoda CustomServlet doPost ()"); super.doPost (req, resp); }} 

Bez Spring Boota konfigurirali bismo svoj CustomServlet u web.xml datoteka:

 customServlet CustomServlet customServlet / servlet 

U aplikaciji Spring Boot, servlet je registriran ili kao Spring @Grah ili skeniranjem @WebServlet komentirane klase s ugrađenim spremnikom.

S proljećem @Grah pristup, možemo koristiti ServletRegistrationBean klase za registraciju servleta.

Dakle, mi ćemo definirati CustomServlet kao grah s ServletRegistrationBean razred:

@Bean public ServletRegistrationBean customServletBean () {ServletRegistrationBean bean = new ServletRegistrationBean (new CustomServlet (), "/ servlet"); grah za povratak; } 

4.3. Registriranje a Slušatelj

Definirajmo slušatelja proširujući ServletContextListener razred:

javna klasa CustomListener implementira ServletContextListener {Logger logger = LoggerFactory.getLogger (CustomListener.class); @Override public void contextInitialized (ServletContextEvent sce) {logger.info ("CustomListener je inicijaliziran"); } @Override public void contextDestroyed (ServletContextEvent sce) {logger.info ("CustomListener je uništen"); }} 

Bez Spring Boota konfigurirali bismo svoj CustomListener u web.xml datoteka:

 CustomListener 

Da bismo definirali slušatelja u aplikaciji Spring Boot, možemo upotrijebiti bilo @Grah ili @WebListener bilješke.

S proljećem @Grah pristup, možemo koristiti ServletListenerRegistrationBean razred za registraciju Slušatelj.

Pa, definirajmo CustomListener kao grah s ServletListenerRegistrationBeanrazred:

@Bean public ServletListenerRegistrationBean customListenerBean () {ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean (); bean.setListener (novi CustomListener ()); grah za povratak; }

Nakon pokretanja naše aplikacije, možemo provjeriti izlaz iz dnevnika kako bismo vidjeli potvrdu da je slušatelj uspješno inicijaliziran:

2020-09-28 08: 50: 30.872 INFO 19612 --- [glavna] c.baeldung.demo.listener.CustomListener: CustomListener je inicijaliziran

5. Zaključak

U ovom smo brzom vodiču vidjeli kako definirati DispatcherServlet i web.xml elementi uključujući filtar, servlet, i slušatelj u aplikaciji Spring Boot. Kao i uvijek, izvorni kod za gornji primjer može se naći na GitHubu.