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

问题?

一、如何定制和修改Servlet容器的相关配置

1、方法1修改和server有关的配置(ServerProperties【也是EmbeddedServletContainerCustomizer】)

  1. server.port=8081
  2. server.contextpath=/crud
  3.  
  4. server.tomcat.uriencoding=UTF8
  5.  
  6. //通用的Servlet容器设置
  7. server.xxx
  8. //Tomcat的设置
  9. server.tomcat.xxx

2、方法2新建一个config类

编写一个EmbeddedServletContainerCustomizer:嵌入式的Servlet容器的定制器;来修改Servlet容器的配置

  1. @Bean //一定要将这个定制器加入到容器中
  2. public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer(){
  3. return new EmbeddedServletContainerCustomizer() {
  4.  
  5. //定制嵌入式的Servlet容器相关的规则
  6. @Override
  7. public void customize(ConfigurableEmbeddedServletContainer container) {
  8.  
  9. container.setPort(8083);
  10. }
  11. }
  12. }

二、注册Servlet三大组件【Servlet、Filter、Listener】

由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器(即嵌入式的tomcat)

来启动SpringBoot的web应用,没有web.xml文件。

1.新建这三个servlet类

2.注册三大组件用以下方式新建一个config类,在这个配置类里传入自己的servlet

ServletRegistrationBeanServlet

  1. //注册三大组件
  2. @Bean
  3. public ServletRegistrationBean myServlet(){
  4. ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet");
  5. return registrationBean; 6
    }

FilterRegistrationBeanFilter

  1. @Bean
  2. public FilterRegistrationBean myFilter(){
  3. FilterRegistrationBean registrationBean = new FilterRegistrationBean();
  4. registrationBean.setFilter(new MyFilter());
  5. registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
  6. return registrationBean; 7 }

ServletListenerRegistrationBeanListener

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

SpringBoot帮我们自动SpringMVC的时候,自动的注册SpringMVC的前端控制器;DIspatcherServlet;

DispatcherServletAutoConfiguration中:

  1. @Bean(name = DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)
  2. @ConditionalOnBean(value = DispatcherServlet.class, name = DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
  3. public ServletRegistrationBean dispatcherServletRegistration( DispatcherServlet dispatcherServlet) {
  4. ServletRegistrationBean registration = new ServletRegistrationBean(
  5. //默认拦截: / 所有请求;包静态资源,但是不拦截jsp请求;/*会拦截jsp
  6. //可以通过server.servletPath来修改SpringMVC前端控制器默认拦截的请求路径
  7.  
  8. registration.setName(DEFAULT_DISPATCHER_SERVLET_BEAN_NAME); registration.setLoadOnStartup(
  9. this.webMvcProperties.getServlet().getLoadOnStartup()); if (this.multipartConfig != null) {
  10. registration.setMultipartConfig(this.multipartConfig);
  11. }
  12. return registration;
  13. }

三、替换为其他嵌入式Servlet容器

(默认是嵌入Tomcat)

默认支持:

Tomcat(默认使用)

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring‐boot‐starter‐web</artifactId>
  4. 引入web模块默认就是使用嵌入式的Tomcat作为Servlet容器;
  5. </dependency>

Jetty

  1. <!‐‐ 引入web模块 ‐‐>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring‐boot‐starter‐web</artifactId>
  5. <exclusions>
  6. <exclusion>
  7. <artifactId>spring‐boot‐starter‐tomcat</artifactId>
  8. <groupId>org.springframework.boot</groupId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>
  12.  
  13. <!‐‐引入其他的Servlet容器‐‐>
  14. <dependency>
  15. <artifactId>spring‐boot‐starter‐jetty</artifactId>
  16. <groupId>org.springframework.boot</groupId>
  17. </dependency>

Undertow

  1. <!‐‐ 引入web模块 ‐‐>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring‐boot‐starter‐web</artifactId>
  5. <exclusions>
  6. <exclusion>
  7. <artifactId>spring‐boot‐starter‐tomcat</artifactId>
  8. <groupId>org.springframework.boot</groupId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>
  12.  
  13. <!‐‐引入其他的Servlet容器‐‐>
  14. <dependency>
  15. <artifactId>spring‐boot‐starter‐undertow</artifactId>
  16. <groupId>org.springframework.boot</groupId>
  17. </dependency>

【串线篇】spring boot配置嵌入式servlet容器的更多相关文章

  1. 17. Spring Boot 配置嵌入式Servlet容器

    一.如何定制和修改Servlet容器的相关配置 1.配置文件(ServerProperties): 优先级最高 server.port=8081 server.context‐path=/crud s ...

  2. Spring boot 配置嵌入式Servlet容器

    SpringBoot默认使用Tomcat作为嵌入式的Servlet容器 1.修改和server有关的配置(ServerProperties[也是EmbeddedServletContainerCust ...

  3. (7)Spring Boot web开发 --- servlet容器

    文章目录 配置嵌入式 Servlet 容器 注册 三大组件 使用其他 servlet 容器 使用外置的 `Servlet` 容器 配置嵌入式 Servlet 容器 Spirng Boot 默认使用自带 ...

  4. 17、配置嵌入式servlet容器(1)

    SpringBoot默认使用Tomcat作为嵌入式的Servlet容器 1).如何定制和修改Servlet容器的相关配置         1.修改和server有关的配置            (Se ...

  5. 18、配置嵌入式servlet容器(2)

    使用其他Servlet容器 -Jetty(长连接) -Undertow(不支持jsp) 替换为其他嵌入式Servlet容器   默认支持: Tomcat(默认使用) Jetty: <depend ...

  6. SpringBoot配置嵌入式Servlet容器

    1).如何定制和修改Servlet容器的相关配置: 1.修改和server有关的配置(ServerProperties[也是EmbeddedServletContainerCustomizer]): ...

  7. 配置嵌入式Servlet容器

    SpringBoot默认是用的是Tomcat作为嵌入式的Servlet容器:问题?1).如何定制和修改Servlet容器的相关配置:1.修改和server有关的配置(ServerProperties) ...

  8. 19、配置嵌入式servlet容器(下)

    使用外置的Servlet   嵌入式Servlet容器:应用打成可执行的j ar 优点:简单.便携: 缺点:默认不支持JSP.优化定制比较复杂         使用定制器[ServerProperti ...

  9. SpringBoot起飞系列-配置嵌入式Servlet容器(八)

    一.前言 springboot中默认使用的是tomcat容器,也叫做嵌入式的servlet容器.因为它和我们平常使用的tomcat容器不一样,这个tomcat直接嵌入到的springboot,平常我们 ...

随机推荐

  1. 插头DP讲解+[BZOJ1814]:Ural 1519 Formula 1(插头DP)

    1.什么是插头$DP$? 插头$DP$是$CDQ$大佬在$2008$年的论文中提出的,是基于状压$D$P的一种更高级的$DP$多用于处理联通问题(路径问题,简单回路问题,多回路问题,广义回路问题,生成 ...

  2. 转载自:StringUtils的常见方法

    转载自:https://blog.csdn.net/simple_smile_sun/article/details/51819158 注:运用StringUtils需要导入相关jar文件,commo ...

  3. 北风设计模式课程---依赖倒置原则(Dependency Inversion Principle)

    北风设计模式课程---依赖倒置原则(Dependency Inversion Principle) 一.总结 一句话总结: 面向对象技术的根基:依赖倒置原则(Dependency Inversion ...

  4. [git] 如何处理push失败的commit

    在使用git及github时,遇到一个问题:commit了一个超过100M的大文件,然后在push时失败,然后就再也无法push了,本地大文件删除了,再commit,再push也还是提示有大文件提交. ...

  5. RAC容灾演练

    RAC容灾演练:在节点一进行验证:步骤 操作命令关闭步骤 检测RAC集群资源状态 crsctl status resource -t 关闭监听 srvctl stop listener -n < ...

  6. Vue音乐播放器(三):项目目录介绍,以及图标字体、公共样式等资源准备

    我们所有的开发都是基于修改src下面的目录 里面的文件去做开发即可 stylus的使用是需要下载stylus-loader的包的 渲染效果 配置修改eslintrc.js 配置了webpack.bas ...

  7. AssertionError: View function mapping is overwriting an existing endpoint function: insertCase

    首先,理解这个错误是什么意思,以及出现的原因: 使用Flask定义URL的时候,如果出现"AssertionError: View function mapping is overwriti ...

  8. Arrays.toList工具类

  9. Delphi XE2 之 FireMonkey 入门(29) - 数据绑定: TBindingsList: 表达式的 Evaluate() 方法

    Delphi XE2 之 FireMonkey 入门(29) - 数据绑定: TBindingsList: 表达式的 Evaluate() 方法 TBindingsList 中可能不止一个表达式, 通 ...

  10. 《图解设计模式》读书笔记8-2 MEMENTO模式

    目录 Memento模式 示例代码 程序类图 代码 角色和类图 模式类图 角色 思路拓展 接口可见性 保存多少个Memento 划分Caretaker和Originator的意义 Memento模式 ...