SpringBoot中的配置servlet容器(使用不同的容器启动服务)

本文详细介绍了在SpringBoot中如何从默认的Tomcat容器切换到Jetty容器,并提供了两种实现方式:通过实现EmbeddedServletContainerCustomizer接口和创建EmbeddedServletContainerFactory的子类。同时,文章还阐述了切换容器时所需添加的依赖以及配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:JDK1.8、MAVEN 3.6.1、eclipse

1.配置tomcat的容器

由于当前的SpringBoot默认使用的Tomcat容器,所以不需要添加pom配置,查看官方文档:

org.springframework.boot.autoconfigure.web.ServerProperties
中存在servlet的配置了Tomcat的所有配置信息

1.1 创建Tomcat配置类(方式一)

当前的TomcatConfig

/**
 * @description 通过创建TomcatEmbeddedServletContainerFactory对象来实现当前的tomcat管理
 * @author hy
 * @date 2019-08-16
 */
@Configuration
public class TomcatConfig {
	//EmbeddedServletContainerFactory 查看当前的EmbeddedServletContainerFactory发现具有
	//tomcat、jetty、Undertow这几个的实现类,这里默认为tomcat
	@Bean
	public EmbeddedServletContainerFactory getEmbeddedServletContainerFactory() {
		TomcatEmbeddedServletContainerFactory tomcat=new TomcatEmbeddedServletContainerFactory("/springboot-tomcat", 8080);//设置当前的tomcat访问端口和地址
		tomcat.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
		return tomcat;
	}
}

1.2 创建入口类并测试

当前的Application类中的内容:

/**
 * @description 配置SpringBoot中的servlet容器
 * @author hy
 * @date 2019-08-16
 */
@RestController
@SpringBootApplication
public class Application 
{	
	@RequestMapping("/hi")
	public String hi() {
		return "【自定义server类!】";
	}
	
    public static void main( String[] args )
    {
       SpringApplication.run(Application.class, args);
    }
}

1.3 测试(方式一)

成功!

1.4 实现EmbeddedServletContainerCustomizer启动Tomcat容器(方式二)

当前的MyTomcatServletContainer类的内容如下:

/**
 * @description 1.通过实现EmbeddedServletContainerCustomizer来进行代码的配置server
 * @author hy
 * @date 2019-08-16
 */
@Component
public class MyTomcatServletContainer implements EmbeddedServletContainerCustomizer {

	public void customize(ConfigurableEmbeddedServletContainer container) {
		container.setPort(8888);// 设置端口
		container.setContextPath("/springboot-tomcat");// 设置访问路径
		//Root ContextPath must be specified using an empty string,当前的contextpath不能设置为/
		container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
	}
}

1.5 测试(方式二)

成功!

2.使用Jetty容器启动

2.1 添加pom依赖

当前的pom文件:

    <properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.2.4.RELEASE</version>
		<relativePath />
	</parent>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- 配置jetty服务器 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jetty</artifactId>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
		</plugins>
	</build>

2.2 启动jetty

EmbeddedServletContainerFactory 查看当前的EmbeddedServletContainerFactory发现具有
tomcat、jetty、Undertow这几个的实现类,这里默认为tomcat

方式一:还是直接使用MyTomcatServletContainer一样可以启动,显示当前的jetty启动了
方式二:修改TomcatConfig中的 getEmbeddedServletContainerFactory方法,返回为JettyEmbeddedServletContainerFactory这个实现类,测试都可以实现

3. 总结

1.使用SpringBoot的时候跟换容器的时候需要导入对应的依赖

2.使用SpringBoot中跟换容器有两种方式:

  • 1.直接实现EmbeddedServletContainerCustomizer ,当前的内容可以改变启动容器,当前容器改变的时候不需要修改,也可以启动
  • 2.创建EmbeddedServletContainerFactory相对应的实现类,缺点:当容器修改的时候,需要修改不同的实现类。

以上纯属个人见解,如有问题请联系本人!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值