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.