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.