SpringBoot默认使用Tomcat作为嵌入式的Servlet容器

定制和修改Servlet容器的相关配置
- 通过SringBoot文件修改和server有关的配置
1 2 3 4 5 6 7 8 9
| server.port=8081 server.context-path=/crud
server.tomcat.uri-encoding=UTF-8
//通用的Servlet容器设置 server.xxx //Tomcat的设置 server.tomcat.xxx
|
- 编写一个EmbeddedServletContainerCustomizer:嵌入式的Servlet容器的定制器,来修改Servlet容器的配置。Spring Boot2.0以上版本EmbeddedServletContainerCustomizer被WebServerFactoryCustomizer替代
SprinBoot-1.0x
EmbeddedServletContainerCustomizer
1 2 3 4 5 6 7 8 9 10 11
| @Bean public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer(){ return new EmbeddedServletContainerCustomizer() {
@Override public void customize(ConfigurableEmbeddedServletContainer container) { container.setPort(8083); } }; }
|
SpringBoot-2.0x
WebServerFactoryCustomize
1 2 3 4 5 6 7 8 9
| @Bean public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer(){ return new WebServerFactoryCustomizer<ConfigurableWebServerFactory>() { @Override public void customize(ConfigurableWebServerFactory factory) { factory.setPort(8080); } }; }
|

注册Servlet三大组件
由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。
注册三大组件用以下方式
- ServletRegistrationBean
- FilterRegistrationBean
- ServletListenerRegistrationBean
注册Servlet
1 2 3 4 5 6 7 8
| @Bean public ServletRegistrationBean myServlet(){ ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet"); registrationBean.setLoadOnStartup(1); return registrationBean; }
|

创建普通的java类继承HttpServlet


注册Filter
1 2 3 4 5 6 7 8 9 10 11 12
| @Bean public FilterRegistrationBean myFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new MyFilter());
registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet")); return registrationBean; }
|
addUrlPatterns方法是添加一个拦截的URL,多个用逗号隔开
setUrlPatterns方法这是一次性的设置一个集合,想要配置拦截的URL。首先要使用Arrays.asList将其转换为集合

创建一个实现了Filter接口的普通java类

注册Listener
1 2 3 4 5
| @Bean public ServletListenerRegistrationBean myListener(){ ServletListenerRegistrationBean<MyListener> registrationBean = new ServletListenerRegistrationBean<>(new MyListener()); return registrationBean; }
|

创建一个实现了指定监听接口的普通java类

使用其他嵌入式Servlet容器
SpringBoot中pom.xml中引入的web模块,默认使用Tomcat作为嵌入式的Servlet容器

引入使用其他的servlet容器,需要在Web模块中先排除默认使用的Tomcat容器

1 2 3 4 5 6 7 8 9 10 11
| <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 3 4 5
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>
|


1 2 3 4 5
| <dependency> <artifactId>spring-boot-starter-undertow</artifactId> <groupId>org.springframework.boot</groupId> </dependency>
|

