SpringBoot 默认使用 Tomcat 作为嵌入式的 Servlet 容器;
如何定制和修改 Servlet 容器的相关配置
1, 修改和 server 有关的配置 (ServerProperties[也是 EmbeddedServletContainerCustomizer] );
- server.port=8081
- server.context-path=/crud
- server.tomcat.uri-encoding=UTF-8
- // 通用的 Servlet 容器设置
- server.xxx
- //Tomcat 的设置
- server.tomcat.xxx
2, 编写一个 EmbeddedServletContainerCustomizer: 嵌入式的 Servlet 容器的定制器; 来修改 Servlet 容器的配置
- @Bean // 一定要将这个定制器加入到容器中
- public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer(){
- return new EmbeddedServletContainerCustomizer() {
- // 定制嵌入式的 Servlet 容器相关的规则
- @Override
- public void customize(ConfigurableEmbeddedServletContainer container) {
- container.setPort(8083);
- }
- };
- }
注册 Servlet 三大组件 [Servlet,Filter,Listener]
由于 SpringBoot 默认是以 jar 包的方式启动嵌入式的 Servlet 容器来启动 SpringBoot 的 web 应用, 没有 Web.xml 文件.
注册三大组件用以下方式
- ServletRegistrationBean
- // 注册三大组件
- @Bean
- public ServletRegistrationBean myServlet(){
- ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet");
- return registrationBean;
- }
- FilterRegistrationBean
- @Bean
- public FilterRegistrationBean myFilter(){
- FilterRegistrationBean registrationBean = new FilterRegistrationBean();
- registrationBean.setFilter(new MyFilter());
- registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
- return registrationBean;
- }
- ServletListenerRegistrationBean
- @Bean
- public ServletListenerRegistrationBean myListener(){
- ServletListenerRegistrationBean<MyListener> registrationBean = new ServletListenerRegistrationBean<>(new MyListener());
- return registrationBean;
- }
SpringBoot 帮我们自动 SpringMVC 的时候, 自动的注册 SpringMVC 的前端控制器; DIspatcherServlet;
DispatcherServletAutoConfiguration 中:
- @Bean(name = DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)
- @ConditionalOnBean(value = DispatcherServlet.class, name = DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
- public ServletRegistrationBean dispatcherServletRegistration(
- DispatcherServlet dispatcherServlet) {
- ServletRegistrationBean registration = new ServletRegistrationBean(
- dispatcherServlet, this.serverProperties.getServletMapping());
- // 默认拦截: / 所有请求; 包静态资源, 但是不拦截 jsp 请求; /* 会拦截 jsp
- // 可以通过 server.servletPath 来修改 SpringMVC 前端控制器默认拦截的请求路径
- registration.setName(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME);
- registration.setLoadOnStartup(
- this.webMvcProperties.getServlet().getLoadOnStartup());
- if (this.multipartConfig != null) {
- registration.setMultipartConfig(this.multipartConfig);
- }
- return registration;
- }
替换为其他嵌入式 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>
来源: http://www.bubuko.com/infodetail-3158701.html