目录

序言

默认的 Tomcat 服务器

切换 Jetty 服务器

切换 Undertow 服务器

Tomcat 与 Undertow 对比


序言

1、Spring Boot 的 web 项目默认使用嵌入式的 Tomcat 服务器,同时它也支持程序员自己切换 内置的 Servlet 容器,如 Jetty 、Undertow

2、Jetty 支持长连接,对于页面与服务器类似建立长连接聊天式的性能很好

3、Jetty 和 Tomcat 都是目前全球范围内最著名的两款开源的webserver/servlet容器。

4、undertow、jetty 和 tomcat 都是 Java Web 项目当下最火的三款服务器,spring boot 完美集成了 tomcat,jetty 和 undertow

Tomcat 是 Apache 下的一款重量级的服务器,历史悠久,经得起实践的考验。

5、Jetty 和 undertow 都是基于 NIO 实现的高并发轻量级的服务器

默认的 Tomcat 服务器

1、如下所示是自己新建的项目  “ tiger ” 的 pom.xml 文件的内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>www.wmx.com</groupId><artifactId>tiger</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>tiger</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version><relativePath/><!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><!-- 引入 Thymeleaf 模板引擎--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- 引入 web 模块,默认就是使用嵌入式的 Tomcat 作为Servlet容器;--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot 自己的测试模块--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 引入Bootstrap的webjars包--><dependency><groupId>org.webjars</groupId><artifactId>bootstrap</artifactId><version>4.0.0</version></dependency></dependencies><build><plugins><!-- Spring Boot 打包的插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

2、在 pom.xml 文件中右击,选择 “ Diagrams (图解)”-> “ show dependencies(显示依赖关系)”

3、启动时控制台如下输出显示,默认就是启动的 Tomcat 服务器,8084 端口是自己修改的,不是默认值了

.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-08-12 11:19:12.744  INFO 11888 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page template: index
2018-08-12 11:19:12.920  INFO 11888 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-08-12 11:19:13.055  INFO 11888 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8084 (http) with context path '/cat'
2018-08-12 11:19:13.059  INFO 11888 --- [           main] com.lct.TigerApplication                 : Started TigerApplication in 4.52 seconds (JVM running for 7.097)

切换 Jetty 服务器

1、知道了上面的 Tomcat 服务器原理,修改起来就简单了。

2、在 依赖关系图解 中的 Spring-boot-start-tomcat 上面右击,选择 “ Exclude ” 将默认的 Tomcat 服务器进行排除

3、如下所示为 pom.xml 文件,其实核心就是排除默认的 Tomcat ,然后 添加 jetty 组件即可:

         <!-- 引入 web 模块,默认就是使用嵌入式的 Tomcat 作为Servlet容器;--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 如下所示已经将 Tomcat 暂时排除在外,不会生效--><exclusions><exclusion><artifactId>spring-boot-starter-tomcat</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions></dependency><!-- 引入 Servlet 容器 jetty--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></dependency>

4、从依赖关系图解可以看出 Spring-boot-starter-jetty 与 spring-boot-starter-web/test 是同级关系,并非从属

5、此时启动应用时,可以看到启动的是 jetty 服务器了,而且 jetty 的端口默认与 Tomcat 一样都是 8080,如果想要修改,则与之前使用 Tomcat 时完全一样,下面的 8084 是修改过的

2018-08-12 11:31:54.050  INFO 11772 --- [           main] o.e.j.s.h.ContextHandler.application     : Initializing Spring FrameworkServlet 'dispatcherServlet'
2018-08-12 11:31:54.051  INFO 11772 --- [           main] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2018-08-12 11:31:54.064  INFO 11772 --- [           main] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 13 ms
2018-08-12 11:31:54.091  INFO 11772 --- [           main] o.e.jetty.server.AbstractConnector       : Started ServerConnector@b9dfc5a{HTTP/1.1,[http/1.1]}{0.0.0.0:8084}
2018-08-12 11:31:54.093  INFO 11772 --- [           main] o.s.b.web.embedded.jetty.JettyWebServer  : Jetty started on port(s) 8084 (http/1.1) with context path '/cat'
2018-08-12 11:31:54.096  INFO 11772 --- [           main] com.lct.TigerApplication                 : Started TigerApplication in 3.718 seconds (JVM running for 4.186)

6、仍然和以前使用 Tomcat 一样可以访问,关于 jetty 服务器的具体知识点,本文不做阐述,本文主要说明 Spring Boot 如何切换内置的 Servlet 容器

切换 Undertow 服务器

1、与上面的切换 Jetty 完全同理,首先在 依赖关系图解 中的 Spring-boot-start-tomcat 上面右击,选择 “ Exclude ” 将默认的 Tomcat 服务器进行排除,或者直接在 pom.xml 文件中将默认的 Servlet 容器 Tomcat 排除,如果是 Jetty ,则先将 Jetty 排除,在将 undertow 组件添加进来即可

        <!-- 引入 web 模块,默认就是使用嵌入式的 Tomcat 作为Servlet容器;--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 如下所示已经将 Tomcat 暂时排除在外,不会生效--><exclusions><exclusion><artifactId>spring-boot-starter-tomcat</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions></dependency><!-- 引入 Servlet 容器 undertow--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId></dependency>

2、此时启动应用时,可以看到启动的是 undertow 服务器了,而且 undertow 的端口默认与 Tomcat 一样都是 8080,如果想要修改,则与之前使用 Tomcat 时完全一样,下面的 8084 是修改过的

2018-08-12 11:50:18.093  INFO 8864 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/uploadFiles/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-08-12 11:50:18.191  INFO 8864 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page template: index
2018-08-12 11:50:18.306  INFO 8864 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
javax.servlet.Filter::服务器启动....
2018-08-12 11:50:18.369  INFO 8864 --- [           main] o.s.b.w.e.u.UndertowServletWebServer     : Undertow started on port(s) 8084 (http) with context path '/cat'
2018-08-12 11:50:18.373  INFO 8864 --- [           main] com.lct.TigerApplication                 : Started TigerApplication in 3.164 seconds (JVM running for 3.616)

3、仍然和以前使用 Tomcat 一样可以访问,关于 undertow 服务器的具体知识点,本文不做阐述,本文主要说明 Spring Boot 如何切换内置的 Servlet 容器

Tomcat 与 Undertow 对比

1、Tomcat 是 Apache 基金下的一个轻量级的 Servlet 容器,支持 Servlet 和 JSP。Tomcat 具有 Web 服务器特有的功能,包括 Tomcat 管理和控制平台、安全局管理和 Tomcat 阀等。Tomcat 本身包含了 HTTP 服务器,因此也可以视作单独的 Web 服务器。

2、但是,Tomcat 和 ApacheHTTP 服务器不是同一个东西,ApacheHTTP 服务器是用 C 语言实现的 HTTP Web 服务器。Tomcat 是完全免费的,深受开发者的喜爱。

3、Undertow 是 Red Hat 公司的开源产品, 它完全采用 Java 语言开发,是一款灵活的高性能 Web 服务器,支持阻塞 IO 和非阻塞 IO。由于 Undertow 采用 Java 语言开发,可以直接嵌入到 Java 项目中使用。同时,Undertow 完全支持 Servlet 和 Web Socket,在高并发情况下表现非常出色。

4、Sping Boot 中我们既可以使用 Tomcat 作为 Http 服务,也可以用 Undertow 来代替。Undertow 在高并发业务场景中,性能优于Tomcat。

Spring Boot 2.x 切换 Servlet 嵌入式容器 Tomcat、Jetty、Undertow相关推荐

  1. SpringBoot 配置嵌入式Servlet容器(tomcat,jetty,undertow)

    SpringBoot 默认打包方式为jar包,且可以自启动,就是因为它内嵌了Servlet容器. SpringBoot 默认使用嵌入式Servlet容器,SpringBoot 2.2.5 默认是 To ...

  2. 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包

    浅谈:Spring Boot原理分析(更多细节解释在代码注释中) 通过@EnableAutoConfiguration注解加载Springboot内置的自动初始化类(加载什么类是配置在spring.f ...

  3. Spring Boot 如何动态切换多数据源?

    大约在19年的这个时候,老同事公司在做医疗系统,需要和HIS系统对接一些信息,比如患者.医护.医嘱.科室等信息.但是起初并不知道如何与HIS无缝对接,于是向我取经. 最终经过讨论采用了视图对接的方式, ...

  4. Spring boot如何打war包发布到tomcat

    前言: 平时在使用java做项目开发时,首先想到利用框架来提升开发效率,和提高可维护性.选择spring可以使用ssm(spring框架,springMVC,mybatis),而且企业中应用也比较广泛 ...

  5. spring boot 项目中遇到的错误(tomcat 400)

    spring boot 项目 get传入的参数是 json数组的时候  会报400 原因:是因为tomcat的版本太高 https://blog.csdn.net/fxz1535567862/arti ...

  6. spring boot项目打包成war并在tomcat上运行的步骤

    原文地址:http://m.blog.csdn.net/article/details?id=52515226 把spring-boot项目按照平常的web项目一样发布到tomcat容器下 一.修改打 ...

  7. IDEA下spring boot项目打包war包部署外部tomcat问题

    第一步,修改配置pom.xml文件 <packaging>war</packaging> <dependency> <groupId>org.sprin ...

  8. Spring Boot 入门

    一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...

  9. Spring Boot 入门与实战笔记

    **一.**Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 20 ...

  10. Spring Boot学习笔记-基础(2)

    Spring Boot学习笔记-基础(2) Spring Boot 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 – 使用嵌入式的Servlet容器,应用无需打成WAR包 – st ...

最新文章

  1. 被大众群体吹的神乎其神的Python到底都能干什么
  2. 最深刻最通俗的HTTPS 原理详解,图文并茂
  3. jQuery中的DatePicker今天按钮不起作用
  4. 刚毕业的参加工作的黄金时期的核心策略:打好基础
  5. break和continue特殊玩法“标签”
  6. Apple原装扫描二维码指定区域
  7. 3、grep,vim,压缩功能详解
  8. 【CA】数字电视CA原理与破解方式
  9. 【GMSK+FPGA】基于verilog的GMSK调制系统设计
  10. 视频无损剪切分割截取合并工具
  11. python+openCV 获取背景(三)
  12. Flink 如何分流数据
  13. word页码与行号怎么统一设置字体
  14. windows服务器迁到_Windows服务器迁移工具使用攻略
  15. laravel+容联.云通讯 实现手机短信验证用户注册
  16. Cocos精品《热血传奇》|五千个日夜 同一个传奇
  17. 计算机的软件教学设计七年级,计算机软件系统教学设计
  18. 你真的了解分类模型评估指标都有哪些吗?【附Python代码实现】
  19. P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
  20. [转]第一次考CCIE FAIL的经历……………

热门文章

  1. 寒江独钓——win内核编程读书笔记-1
  2. 自己写的一个分享按钮的插件(可扩展,内附开发制作流程)
  3. centos samba 看不到共享目录_linux入门系列--文件共享之Samba和NFS
  4. 【大数据部落】银行信用数据SOM神经网络聚类实现
  5. 拓端tecdat|R语言高级图像处理
  6. Android入门笔记12
  7. pytorch maskrcnn实战
  8. 目标检测(Object Detection)的整理
  9. Yolov3目标检测实战【实现图像中随机出现手写数字的检测】
  10. mysql字段类型解析_MySQL数据类型之数字类型详细解析