Java-web servlet
阿新 • • 發佈:2021-12-13
傳統MVC專案
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0</version> <scope>provided</scope> </dependency> <!-- 不用jakarta,否則報javax.servlet.ServletException --> <!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api --> <!-- <dependency>--> <!-- <groupId>jakarta.servlet</groupId>--> <!-- <artifactId>jakarta.servlet-api</artifactId>--> <!-- <version>5.0.0</version>--> <!-- <scope>provided</scope>--> <!-- </dependency>--> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.13</version> </dependency>
servlet
implements ServletContainerInitializer
整合spring Mvc
extends AbstractAnnotationConfigDispatcherServletInitializer
@WebFilter
public class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[0]; } @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[]{ WebConfig.class }; } @Override protected String[] getServletMappings() { return new String[]{ "/" }; } @Override protected String getServletName() { return "dispatcher"; } } @ComponentScan(value = "com.xx", excludeFilters = { @Filter(type = FilterType.ANNOTATION, classes = {Controller.class, ControllerAdvice.class, RestControllerAdvice.class}), // 記得排除,否則會重複掃描 @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {WebConfig.class}) } ) @Configuration public class RootConfig { } @ComponentScan(value = "com.xx", useDefaultFilters = false, includeFilters = {@Filter(type = FilterType.ANNOTATION, classes = {Controller.class, ControllerAdvice.class, RestControllerAdvice.class})} ) @Configuration public class WebConfig { }
web容器驅動Spring容器,而Spring Boot是Spring容器驅動web容器(預設情況下)
Spring Boot
替換原來的容器
public class WebServerFactoryCustomizer implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> { @Override public void customize(UndertowServletWebServerFactory factory) { factory.addDeploymentInfoCustomizers(deploymentInfo -> { WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo(); webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(false, 1024)); deploymentInfo.addServletContextAttribute("io.undertow.websockets.jsr.WebSocketDeploymentInfo", webSocketDeploymentInfo); }); } }