DispatcherServlet en web.xml in Spring Boot

1. Overzicht

De DispatcherServlet is de frontcontroller in Spring-webapplicaties. Het wordt gebruikt om webtoepassingen en REST-services te maken in Spring MVC. In een traditionele Spring-webtoepassing wordt deze servlet gedefinieerd in de web.xml het dossier.

In deze zelfstudie migreren we code van een web.xml bestand naar DispatcherServlet in een Spring Boot-applicatie. We zullen ook in kaart brengen Filter, Servlet, en Luisteraar lessen van web.xml naar de Spring Boot-applicatie.

2. Maven Afhankelijkheid

Eerst moeten we de spring-boot-starter-web Maven afhankelijkheid van onze pom.xml het dossier:

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

3. DispatcherServlet

DispatcherServlet ontvangt alle HTTP-verzoeken en delegeert deze aan controllerklassen.

Vóór de Servlet 3.x-specificatie, DispatcherServlet zou worden geregistreerd in de web.xml bestand voor een Spring MVC-toepassing. Sinds de Servlet 3.x-specificatie kunnen we servlets programmatisch registreren met ServletContainerInitializer.

Laten we eens kijken naar een DispatcherServlet voorbeeldconfiguratie in de web.xml het dossier:

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

Spring Boot biedt de spring-boot-starter-web bibliotheek voor het ontwikkelen van webapplicaties met Spring MVC. Een van de belangrijkste kenmerken van Spring Boot is automatische configuratie. De autoconfiguratie van Spring Boot registreert en configureert het DispatcherServlet automatisch. Daarom hoeven we het DispatcherServlet handmatig.

Standaard is het spring-boot-starter-web starter configureert DispatcherServlet naar het URL-patroon "/". We hoeven dus geen aanvullende configuratie uit te voeren voor het bovenstaande DispatcherServlet voorbeeld in de web.xml het dossier. We kunnen het URL-patroon echter aanpassen met server.servlet.* in de application.properties het dossier:

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

Met deze aanpassingen, DispatcherServlet is geconfigureerd om het URL-patroon af te handelen / baeldung en de wortel contextPath zal zijn / demo. Dus, DispatcherServlet luistert naar // localhost: 8080 / demo / baeldung /.

4. Applicatieconfiguratie

Spring MVC-webapplicaties gebruiken de web.xml bestand als een Deployment-descriptorbestand. Het definieert ook toewijzingen tussen URL-paden en de servlets in het web.xml het dossier.

Dit is niet langer het geval met Spring Boot. Als we een speciaal filter nodig hebben, kunnen we dit registreren in een Java-klasseconfiguratie. De web.xml bestand bevat filters, servlets en luisteraars.

Als we willen migreren van een traditionele Spring MVC naar een moderne Spring Boot-applicatie, hoe kunnen we onze web.xml naar een nieuwe Spring Boot-applicatie? In Spring Boot-applicaties kunnen we deze concepten op verschillende manieren toevoegen.

4.1. Registreren van een Filter

Laten we een filter maken door het Filter koppel:

@Component openbare klasse CustomFilter implementeert Filter {Logger logger = LoggerFactory.getLogger (CustomFilter.class); @Override public void init (FilterConfig filterConfig) gooit ServletException {} @Override public void doFilter (ServletRequest-verzoek, ServletResponse-antwoord, FilterChain-keten) gooit IOException, ServletException {logger.info ("CustomFilter wordt aangeroepen"); chain.doFilter (verzoek, antwoord); } // andere methodes }

Zonder Spring Boot zouden we onze CustomFilterin de web.xml het dossier:

 customFilter CustomFilter customFilter / * 

Om Spring Boot een filter te laten herkennen, hoefden we het alleen maar te definiëren als een boon met de @Component annotatie.

4.2. Registreren van een Servlet

Laten we een servlet definiëren door de extensie HttpServlet klasse:

openbare klasse CustomServlet breidt HttpServlet {Logger logger = LoggerFactory.getLogger (CustomServlet.class) uit; @Override beschermde ongeldige doGet (HttpServletRequest req, HttpServletResponse resp) gooit ServletException, IOException {logger.info ("CustomServlet doGet () methode wordt aangeroepen"); super.doGet (req, resp); } @Override beschermde ongeldige doPost (HttpServletRequest req, HttpServletResponse resp) gooit ServletException, IOException {logger.info ("CustomServlet doPost () methode wordt aangeroepen"); super.doPost (req, resp); }} 

Zonder Spring Boot zouden we onze CustomServlet in de web.xml het dossier:

 customServlet CustomServlet customServlet / servlet 

In een Spring Boot-applicatie wordt de servlet geregistreerd als een Spring @Boon of door het @WebServlet geannoteerde klassen met een ingesloten container.

Met de lente @Boon benadering, kunnen we de ServletRegistrationBean class om de servlet te registreren.

Dus we zullen het definiëren CustomServlet als boon met de ServletRegistrationBean klasse:

@Bean openbare ServletRegistrationBean customServletBean () {ServletRegistrationBean bean = nieuwe ServletRegistrationBean (nieuwe CustomServlet (), "/ servlet"); terugkeer boon; } 

4.3. Registreren van een Luisteraar

Laten we een luisteraar definiëren door de extensie ServletContextListener klasse:

openbare klasse CustomListener implementeert ServletContextListener {Logger logger = LoggerFactory.getLogger (CustomListener.class); @Override public void contextInitialized (ServletContextEvent sce) {logger.info ("CustomListener is geïnitialiseerd"); } @Override public void contextDestroyed (ServletContextEvent sce) {logger.info ("CustomListener is vernietigd"); }} 

Zonder Spring Boot zouden we onze CustomListener in de web.xml het dossier:

 CustomListener 

Om een ​​luisteraar in een Spring Boot-toepassing te definiëren, kunnen we ofwel de @Boon of @WebListener annotaties.

Met de lente @Boon benadering, kunnen we de ServletListenerRegistrationBean class om het Luisteraar.

Dus laten we het definiëren CustomListener als boon met de ServletListenerRegistrationBeanklasse:

@Bean openbare ServletListenerRegistrationBean customListenerBean () {ServletListenerRegistrationBean bean = nieuwe ServletListenerRegistrationBean (); bean.setListener (nieuwe CustomListener ()); terugkeer boon; }

Bij het starten van onze applicatie kunnen we de loguitvoer controleren om te zien of de luisteraar succesvol is geïnitialiseerd:

2020-09-28 08: 50: 30.872 INFO 19612 --- [main] c.baeldung.demo.listener.CustomListener: CustomListener is geïnitialiseerd

5. Conclusie

In deze korte handleiding hebben we gezien hoe u DispatcherServlet en web.xml elementen inclusief filter, servlet, en luisteraar in een Spring Boot-applicatie. En, zoals altijd, is de broncode voor het bovenstaande voorbeeld te vinden op GitHub.


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