그러나 SpringBoot는 다른 서블릿 컨테이너도 지원합니다. 기본 Tomcat은 그 중 하나일 뿐입니다
Jetty
는 채팅과 같은 긴 링크 애플리케이션에 적합합니다Jetty
适合用于长链接应用 例如聊天
Undertow
是一个高性能非阻塞的Servlet容器 并发性能非常好 但不支持jsp
若要切换 只需要在pom文件中排除自带的Tomcat启动器 再引入其它Servlet容器的启动器即可
spring-boot-starter-web里面引入了spring-boot-starter-tomcat 因此默认使用Tomcat
因此 只需排除原先的Tomcat 再引入要添加的Servlet容器的依赖 即可:
切换成Jetty:
<!-- 引入Web模块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <!-- 排除tomcat容器 --> <exclusion> <artifactId>spring-boot-starter-tomcat</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <!-- 引入其它的Servlet容器 --> <dependency> <artifactId>spring-boot-starter-jetty</artifactId> <groupId>org.springframework.boot</groupId> </dependency>
Jetty启动成功
同理 切换成undertow:
<!-- 引入Web模块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <!-- 排除tomcat容器 --> <exclusion> <artifactId>spring-boot-starter-tomcat</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <!-- 引入其它的Servlet容器 --> <dependency> <artifactId>spring-boot-starter-undertow</artifactId> <groupId>org.springframework.boot</groupId> </dependency>
Undertow启动成功
1.1、SpringBoot支持的Servlet种类及其切换
1)默认支持的webServer:Tomcat、Jrtty、Undertow
2)切换服务器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
1.2、原理
1)SpringBoot应用启动发现当前是Web应用。web场景包-导入tomcat
2)web应用会创建一个web版的ioc容器 ServletWebServerApplicationContext
3)ServletWebServerApplicationContext 启动的时候寻找 ServletWebServerFactory(Servlet 的web服务器工厂---> Servlet 的web服务器)
4)SpringBoot底层默认有很多的WebServer工厂;
TomcatServletWebServerFactory
JettyServletWebServerFactory
UndertowServletWebServerFactory
Undertow
는 매우 뛰어난 기능을 갖춘 고성능 비차단 서블릿 컨테이너입니다. 동시성 성능은 좋지만 jsp를 지원하지 않습니다
전환하려면
pom 파일에서 내장된 Tomcat 스타터를 제외하고 다른 서블릿 컨테이너의 스타터를 도입하기만 하면 됩니다
spring-boot-starter-web에는 spring-boot-starter-tomcat이 도입되었으므로 기본 Tomcat 사용따라서 원본 Tomcat을 제외하고 추가할 서블릿 컨테이너의 종속성을 도입하세요.Jetty로 전환:
#修改servlet容器 server.port=8000 #server.undertow.accesslog.dir=/tmp
Jetty가 성공적으로 시작되었습니다
Similarly switch 설명:
import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; import org.springframework.stereotype.Component; @Component public class CustomizationBean implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> { @Override public void customize(ConfigurableServletWebServerFactory server) { server.setPort(9000); } }Undertow가 성공적으로 시작되었습니다
SpringBoot 웹 개발_임베디드 서블릿 컨테이너
1. 내장된 서블릿 컨테이너 전환1.1, SpringBoot에서 지원하는 서블릿 유형 및 전환
1) 기본 지원 웹 서버: Tomcat, Jrtty, Undertow
2) 서버 전환
public interface ConfigurableWebServerFactory extends WebServerFactory, ErrorPageRegistry { void setPort(int port); void setAddress(InetAddress address); void setErrorPages(Set<? extends ErrorPage> errorPages); void setSsl(Ssl ssl); void setSslStoreProvider(SslStoreProvider sslStoreProvider); void setHttp2(Http2 http2); void setCompression(Compression compression); void setServerHeader(String serverHeader); default void setShutdown(Shutdown shutdown) { } }
1.2, 원리
1) SpringBoot 애플리케이션이 시작되면 현재 웹 애플리케이션임을 알 수 있습니다. 웹 시나리오 패키지 - import tomcat2) 웹 애플리케이션은 ioc 컨테이너의 웹 버전을 생성합니다 ServletWebServerApplicationContext
🎜3) ServletWebServerApplicationContext 시작 시 ServletWebServerFactory(서블릿의 웹 서버 팩토리 ---> 서블릿의 웹 서버)🎜🎜4를 찾습니다. ) 기본적으로 SpringBoot 하단에는 많은 WebServer 팩토리가 있습니다. 🎜🎜🎜🎜TomcatServletWebServerFactory
🎜🎜🎜🎜JettyServletWebServerFactory
🎜🎜🎜🎜UndertowServletWebServerFactory
🎜🎜 🎜🎜 5) 하단에 바로 자동 구성 수업이 있습니다. 🎜🎜ServletWebServerFactoryAutoConfiguration import ServletWebServerFactoryConfiguration(구성 클래스)🎜🎜6) ServletWebServerFactoryConfiguration 구성 클래스는 어떤 웹 서버 패키지를 시스템으로 가져왔는지 동적으로 결정합니다. (기본값은 web-starter가 tomcat 패키지를 가져오는 것입니다.) 그리고 컨테이너에 TomcatServletWebServerFactory가 있습니다🎜🎜7) TomcatServletWebServerFactory는 Tomcat 서버를 생성하고 이를 시작합니다. TomcatWebServer의 생성자에는 초기화 메서드인 this.tomcat이 있습니다. start();🎜🎜8 ) 임베디드 서버는 서버를 시작하기 위한 코드를 수동으로 호출합니다(Tomcat Core Jar 패키지가 존재함) 🎜🎜2. 서블릿 컨테이너 사용자 정의 🎜🎜🎜2.1 구성 파일 수정 🎜🎜🎜 application.properties 구성 파일을 설정하여 서블릿 컨테이너 🎜rrreee🎜🎜2.2, WebServerFactoryCustomizer🎜🎜🎜🎜xxxxx🎜🎜Customizer🎜🎜 구현: Customizer, xxxx🎜🎜🎜의 기본 규칙을 변경할 수 있습니다. 서블릿의 응답 포트 번호를 수정합니다. 🎜WebServerFactoryCustomizer🎜를 통한 컨테이너: 🎜rrreee🎜🎜2.3 , ConfigurableServletWebServerFactory 🎜🎜🎜 🎜ConfigurableServletWebServerFactory 🎜🎜rrreee🎜🎜ConfigurableServletWebServerFactory 🎜Inter의 인터페이스 구현 클래스를 직접 사용자 정의 얼굴 구현 클래스(프레임워크의 기본 구현 클래스): 🎜🎜🎜🎜🎜By customization 🎜ConfigurableServletWebServerFactory 🎜인터페이스의 구현 클래스, 그게 바로 맞춤형 서블릿 컨테이너🎜위 내용은 SpringBoot를 다른 임베디드 서블릿 컨테이너로 전환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!