DispatcherServlet og web.xml i Spring Boot

1. Oversigt

Det DispatcherServlet er den forreste controller i Spring-webapplikationer. Det bruges til at oprette webapplikationer og REST-tjenester i Spring MVC. I en traditionel Spring-webapplikation er denne servlet defineret i web.xml fil.

I denne vejledning migrerer vi kode fra en web.xml fil til DispatcherServlet i en Spring Boot-applikation. Vi kortlægger også Filter, Servletog Lytter klasser fra web.xml til Spring Boot-applikationen.

2. Maven-afhængighed

Først skal vi tilføje spring-boot-starter-web Maven afhængighed af vores pom.xml fil:

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

3. DispatcherServlet

DispatcherServlet modtager alle HTTP-anmodninger og delegerer dem til controller-klasser.

Før Servlet 3.x-specifikationen, DispatcherServlet ville blive registreret i web.xml fil til en Spring MVC-applikation. Da Servlet 3.x-specifikationen kan vi registrere servlets programmatisk ved hjælp af ServletContainerInitializer.

Lad os se en DispatcherServlet eksempel konfiguration i web.xml fil:

 dispatcher org.springframework.web.servlet.DispatcherServlet dispatcher / 

Spring Boot leverer spring-boot-starter-web bibliotek til udvikling af webapplikationer ved hjælp af Spring MVC. En af hovedfunktionerne i Spring Boot er autokonfiguration. Spring Boot-autokonfigurationen registrerer og konfigurerer DispatcherServlet automatisk. Derfor behøver vi ikke registrere DispatcherServlet manuelt.

Som standard er spring-boot-starter-web starter konfigurerer DispatcherServlet til URL-mønsteret “/”. Så vi behøver ikke at fuldføre nogen yderligere konfiguration til ovenstående DispatcherServlet eksempel i web.xml fil. Vi kan dog tilpasse URL-mønsteret ved hjælp af server.servlet.* i application.properties fil:

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

Med disse tilpasninger DispatcherServlet er konfigureret til at håndtere URL-mønsteret / baeldung og roden kontekststi vil være / demo. Dermed, DispatcherServlet lytter til // localhost: 8080 / demo / baeldung /.

4. Konfiguration af applikation

Spring MVC webapplikationer bruger web.xml fil som en distributionsbeskrivelsesfil. Det definerer også tilknytninger mellem URL-stier og servlets i web.xml fil.

Dette er ikke længere tilfældet med Spring Boot. Hvis vi har brug for et specielt filter, kan vi registrere det i en Java-klassekonfiguration. Det web.xml filen indeholder filtre, servlets og lyttere.

Når vi vil migrere fra en traditionel Spring MVC til en moderne Spring Boot-applikation, hvordan kan vi portere vores web.xml til en ny Spring Boot-applikation? I Spring Boot-applikationer kan vi tilføje disse koncepter på flere måder.

4.1. Registrering af en Filter

Lad os oprette et filter ved at implementere Filter grænseflade:

@Komponent offentlig klasse CustomFilter implementerer Filter {Logger logger = LoggerFactory.getLogger (CustomFilter.class); @Override public void init (FilterConfig filterConfig) kaster ServletException {} @Override public void doFilter (ServletRequest anmodning, ServletResponse svar, FilterChain chain) kaster IOException, ServletException {logger.info ("CustomFilter er påkaldt"); chain.doFilter (anmodning, svar); } // andre metoder}

Uden Spring Boot ville vi konfigurere vores CustomFilteri web.xml fil:

 customFilter CustomFilter customFilter / * 

For at Spring Boot kunne genkende et filter, var vi bare nødt til at definere det som en bønne med @Komponent kommentar.

4.2. Registrering af en Servlet

Lad os definere en servlet ved at udvide HttpServlet klasse:

offentlig klasse CustomServlet udvider HttpServlet {Logger logger = LoggerFactory.getLogger (CustomServlet.class); @ Override beskyttet ugyldigt doGet (HttpServletRequest req, HttpServletResponse resp) kaster ServletException, IOException {logger.info ("CustomServlet doGet () -metoden påberåbes"); super.doGet (req, resp); } @ Override beskyttet ugyldigt doPost (HttpServletRequest req, HttpServletResponse resp) kaster ServletException, IOException {logger.info ("CustomServlet doPost () -metoden påberåbes"); super.doPost (req, resp); }} 

Uden Spring Boot ville vi konfigurere vores CustomServlet i web.xml fil:

 customServlet CustomServlet customServlet / servlet 

I en Spring Boot-applikation registreres servlet enten som en Spring @Bønne eller ved at scanne @WebServlet kommenterede klasser med en integreret container.

Med foråret @Bønne tilgang, kan vi bruge ServletRegistrationBean klasse for at registrere servlet.

Så vi definerer CustomServlet som en bønne med ServletRegistrationBean klasse:

@Bean public ServletRegistrationBean customServletBean () {ServletRegistrationBean bean = new ServletRegistrationBean (new CustomServlet (), "/ servlet"); retur bønne; } 

4.3. Registrering af en Lytter

Lad os definere en lytter ved at udvide ServletContextListener klasse:

offentlig klasse CustomListener implementerer ServletContextListener {Logger logger = LoggerFactory.getLogger (CustomListener.class); @ Overstyr offentlig ugyldig kontekstInitialiseret (ServletContextEvent sce) {logger.info ("CustomListener initialiseres"); } @ Override offentlig ugyldig contextDestroyed (ServletContextEvent sce) {logger.info ("CustomListener er ødelagt"); }} 

Uden Spring Boot ville vi konfigurere vores CustomListener i web.xml fil:

 CustomListener 

For at definere en lytter i en Spring Boot-applikation kan vi bruge enten @Bønne eller @WebListener kommentarer.

Med foråret @Bønne tilgang, kan vi bruge ServletListenerRegistrationBean klasse til at registrere Lytter.

Så lad os definere CustomListener som en bønne med ServletListenerRegistrationBeanklasse:

@Bean public ServletListenerRegistrationBean customListenerBean () {ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean (); bean.setListener (ny CustomListener ()); retur bønne; }

Når vi starter vores applikation, kan vi kontrollere logoutputtet for at se bekræftelse på, at lytteren er initialiseret med succes:

2020-09-28 08: 50: 30.872 INFO 19612 --- [main] c.baeldung.demo.listener.CustomListener: CustomListener er initialiseret

5. Konklusion

I denne hurtige vejledning så vi, hvordan vi definerede DispatcherServlet og web.xml elementer inklusive filter, servletog lytter i en Spring Boot-applikation. Og som altid kan kildekoden til ovenstående eksempel findes på GitHub.


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