SpringBoot之配置嵌入式Servlet容器
阿新 • • 發佈:2019-01-08
1、SpringBoot預設使用Tomcat作為嵌入式的Servlet容器;
2、如何定製和修改Servlet容器的相關配置;有兩種方式
1).修改和server有關的配置(ServerProperties【也是EmbeddedServletContainerCustomizer】);
spring.mvc.date-format=yyyy-MM-dd spring.thymeleaf.cache=false spring.messages.basename=i18n.login server.port=8081 server.context-path=/crud server.tomcat.uri-encoding=UTF-8
通用的Servlet容器設定server.xxx Tomcat的設定server.tomcat.xxx
2).編寫一個**EmbeddedServletContainerCustomizer**:嵌入式的Servlet容器的定製器;來修改Servlet容器的配置
3、註冊servlet三大元件:servlet,filter,listener
MyServlet:
MyFilter:過濾器
MyListener:監聽器
由於SpringBoot預設是以jar包的方式啟動嵌入式的Servlet容器來啟動SpringBoot的web應用,沒有web.xml檔案。註冊三大元件用以下方式ServletRegistrationBean,FilterRegistrationBean,ServletListenerRegistrationBean
@Configuration public class MyServerConfig { //註冊三大元件 @Bean public ServletRegistrationBean myServlet(){ //對映/myServlet請求 ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet"); registrationBean.setLoadOnStartup(1); return registrationBean; } @Bean public FilterRegistrationBean myFilter(){ FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new MyFilter()); registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet")); return registrationBean; } @Bean public ServletListenerRegistrationBean myListener(){ ServletListenerRegistrationBean<MyListener> registrationBean = new ServletListenerRegistrationBean<>(new MyListener()); return registrationBean; } //配置嵌入式的Servlet容器 @Bean public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer(){ return new EmbeddedServletContainerCustomizer() { //定製嵌入式的Servlet容器相關的規則 @Override public void customize(ConfigurableEmbeddedServletContainer container) { container.setPort(8083); } }; } }
SpringBoot在配置SpringMVC的時候,自動的註冊SpringMVC的前端控制器:DIspatcherServlet;所以不用配了
參考DispatcherServletAutoConfiguration類原始碼:
4、替換為其他嵌入式Servlet容器
預設為tomcat:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
引入web模組預設就是使用嵌入式的Tomcat作為Servlet容器;
</dependency>
Jetty:
<!-- 引入web模組 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<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>
Undertow:
<!-- 引入web模組 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<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>