Servlet容器Tomcat、Jetty、Undertow介绍与对比
概述
前置文章Servlet基础知识
Servlet容器
Tomcat
Jetty
Jetty的定位:Servlet容器和HTTP服务器(Servlet Engine and HTTP Server)。eclipse下项目。
Jetty目录结构,基本上可以和tomcat一一对应:
- bin:可执行脚本文件
- demo-base:
- etc:XML配置文件的目录
- lib:依赖库文件
- logs:日志
- modules:模块
- resources:外部资源配置文件的目录
- webapps: war包目录,start.ini定义Jetty的活动模块。
start.ini
配置
# webapps是默认的Web项目的部署目录,可修改
jetty.deploy.monitoredDir=webapps
Jetty的模块化架构
Jetty支持的模块:HTTP、HTTPS、SSL、logging、JMX、JNDI、WebSocket。常用模块如HTTP、JSP和WebSocket都是默认激活的,其他模块则需要手动激活。模块是扩展名为.mod的文件,它声明要被激活的JAR文件和XML配置文件,以及其他要作为模块被激活的资源。模块的两种激活方式:
java -jar start.jar --add-to-startd=logging
执行后在Jetty目录下创建logging.ini
start.ini
激活模块:--module=logging
,更常用
两种协议工作方式:
- 基于HTTP
- 基于AJP
用于Jetty 集成Jboss、 Apache。
Jetty的所有组件都基于Handler实现,支持 JMX。Jetty 是面向 Handler 的架构,就像 Spring 是面向 Bean 的架构,iBATIS 是面向 statement 一样。Handler采用责任链模式,接口HandlerCollection用于构建一个链,接口ScopeHandler用于控制这个链的访问顺序。
undertow
Spring Boot支持tomcat、jetty、undertow三种容器。
官网:http://undertow.io/
不仅仅是一个Servlet容器,还支持Web Socket,HTTP2,HTTP升级(HTTP Upgrade)。
对比
同:
都支持标准的Servlet、JavaEE规范。
异:
Tomcat诞生早,使用更广泛,对规范的支持更全面。Tomcat 在处理少数非常繁忙的连接上更有优势,适用于短生命周期连接。架构复杂,Tomcat 的核心是其容器的设计,从 Server 到 Service 再到 Engine 等 Container 容器,Tomcat 是以多级容器构建起来的。大多数企业级应用首选。
Jetty轻量级,易扩展,组件按需加载&可插拔,对最新Servlet规范支持响应快。组件按需加载时,服务器本身内存开销小。Jetty 可以同时处理大量连接而且可以长时间保持这些连接,适用场景:web 聊天应用。默认使用的是 NIO 技术。处理静态资源时,性能好。
性能对比
benchmark对比,
给出数据,
todo