Spring Boot 2.x 切换 Servlet 嵌入式容器 Tomcat、Jetty、Undertow
目录
序言
默认的 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相关推荐
- SpringBoot 配置嵌入式Servlet容器(tomcat,jetty,undertow)
SpringBoot 默认打包方式为jar包,且可以自启动,就是因为它内嵌了Servlet容器. SpringBoot 默认使用嵌入式Servlet容器,SpringBoot 2.2.5 默认是 To ...
- 浅谈:Spring Boot原理分析,切换内置web服务器,SpringBoot监听项目(使用springboot-admin),将springboot的项目打成war包
浅谈:Spring Boot原理分析(更多细节解释在代码注释中) 通过@EnableAutoConfiguration注解加载Springboot内置的自动初始化类(加载什么类是配置在spring.f ...
- Spring Boot 如何动态切换多数据源?
大约在19年的这个时候,老同事公司在做医疗系统,需要和HIS系统对接一些信息,比如患者.医护.医嘱.科室等信息.但是起初并不知道如何与HIS无缝对接,于是向我取经. 最终经过讨论采用了视图对接的方式, ...
- Spring boot如何打war包发布到tomcat
前言: 平时在使用java做项目开发时,首先想到利用框架来提升开发效率,和提高可维护性.选择spring可以使用ssm(spring框架,springMVC,mybatis),而且企业中应用也比较广泛 ...
- spring boot 项目中遇到的错误(tomcat 400)
spring boot 项目 get传入的参数是 json数组的时候 会报400 原因:是因为tomcat的版本太高 https://blog.csdn.net/fxz1535567862/arti ...
- spring boot项目打包成war并在tomcat上运行的步骤
原文地址:http://m.blog.csdn.net/article/details?id=52515226 把spring-boot项目按照平常的web项目一样发布到tomcat容器下 一.修改打 ...
- IDEA下spring boot项目打包war包部署外部tomcat问题
第一步,修改配置pom.xml文件 <packaging>war</packaging> <dependency> <groupId>org.sprin ...
- Spring Boot 入门
一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...
- Spring Boot 入门与实战笔记
**一.**Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 20 ...
- Spring Boot学习笔记-基础(2)
Spring Boot学习笔记-基础(2) Spring Boot 优点: – 快速创建独立运行的Spring项目以及与主流框架集成 – 使用嵌入式的Servlet容器,应用无需打成WAR包 – st ...
最新文章
- 被大众群体吹的神乎其神的Python到底都能干什么
- 最深刻最通俗的HTTPS 原理详解,图文并茂
- jQuery中的DatePicker今天按钮不起作用
- 刚毕业的参加工作的黄金时期的核心策略:打好基础
- break和continue特殊玩法“标签”
- Apple原装扫描二维码指定区域
- 3、grep,vim,压缩功能详解
- 【CA】数字电视CA原理与破解方式
- 【GMSK+FPGA】基于verilog的GMSK调制系统设计
- 视频无损剪切分割截取合并工具
- python+openCV 获取背景(三)
- Flink 如何分流数据
- word页码与行号怎么统一设置字体
- windows服务器迁到_Windows服务器迁移工具使用攻略
- laravel+容联.云通讯 实现手机短信验证用户注册
- Cocos精品《热血传奇》|五千个日夜 同一个传奇
- 计算机的软件教学设计七年级,计算机软件系统教学设计
- 你真的了解分类模型评估指标都有哪些吗?【附Python代码实现】
- P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
- [转]第一次考CCIE FAIL的经历……………