概述

前置文章​​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配置文件,以及其他要作为模块被激活的资源。模块的两种激活方式:

  1. ​java -jar start.jar --add-to-startd=logging​​​执行后在Jetty目录下创建​​logging.ini​
  2. ​start.ini​​​激活模块:​​--module=logging​​,更常用

两种协议工作方式:

  1. 基于HTTP
  2. 基于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

参考

​Jetty 的工作原理以及与 Tomcat 的比较​