Jak wszyscy wiecie, Spring Boot to wspaniały sposób na opracowanie aplikacji internetowej lub StandaloneApp przy minimalnej konfiguracji i szczegółowej instalacji.
W ten sposób osiągnąłem Rozwój filtra internetowego w aplikacji Spring Boot
Moja specyfikacja SpringBootApp: -
Wersja Spring Boot: 2.0.4. ZWOLNIENIE
Wersja Java: 8.0
Specyfikacja serwletu: Servlet 3.0 (obowiązkowy i ważny)
Zadeklarowałem mój filtr sieciowy w następujący sposób, zgodnie ze specyfikacją serwletu 3.0
Jest to programowy sposób definiowania filtra jako zamiennika definicji opartych na pliku web.xml.
Adnotacja „@Webfilter” zostanie przetworzona przez kontener podczas wdrażania, klasa Filter, w której zostanie znaleziona, zostanie utworzona zgodnie z konfiguracją i zastosowana do wzorców adresów URL javax.servlet.Servlets i javax.servlet.DispatcherTypes.
Aby całkowicie uniknąć Web.xml i osiągnąć WebApp „do wdrożenia”: -
Aby wdrożyć aplikację Spring Boot jako „tradycyjną WAR”, klasa aplikacji powinna rozszerzyć SpringBootServletInitializer.
UWAGA ::
SpringBootServletInitializer to „programowa implementacja” pliku web.xml w odniesieniu do specyfikacji Servlet 3.0+, która wymaga implementacji WebApplicationInitializer.
Zatem SpringBootApplication nie wymaga pliku „web.xml”, ponieważ jego klasa aplikacji (po rozszerzeniu SpringBootServletInitializer) skanuje w poszukiwaniu
- @WebFilter,
- @WebListener i
- @WebServlet.
Adnotacja @ServletComponentScan
Ta adnotacja umożliwia skanowanie pakietów podstawowych w poszukiwaniu składników WWW opatrzonych adnotacjami @WebFilter, @WebListener i @WebServlet.
Ze względu na fakt, że osadzone kontenery nie obsługują adnotacji @WebServlet, @WebFilter i @WebListener, Spring Boot, polegając w dużej mierze na osadzonych kontenerach, wprowadził nową adnotację @ServletComponentScan do obsługi niektórych zależnych słoików, które używają tych 3 adnotacji.
Skanowanie jest wykonywane tylko przy użyciu osadzonego kontenera serwletu.
Oto moja definicja klasy aplikacji Spring Boot: -
Niestandardowy inicjator serwletu: -
Tutaj: zdefiniowałem niestandardową klasę: „ServletInitializer”, która rozszerza klasę: SpringBootServletInitializer.
Jak wyjaśniono wcześniej, SpringBootServletInitializer odpowiada za skanowanie adnotacji: -
- @WebFilter,
- @WebListener i
- @WebServlet.
I dlatego klasa aplikacji Spring Boot powinna
- Albo rozszerz klasę: SpringBootServletInitializer OR
- expand Klasa niestandardowa, która rozszerza klasę: SpringBootServletInitializer