传统 Servlet 容器
Eclipse
Jetty
什么是Jetty?
简单来讲Jetty就是一个开源的HTTP服务器和Servlet引擎,它可以为JSP和Servlet提供运行时环境,比如Java Web应用最常用的Servlet容器Tomcat,由于其轻量、灵活的特性,Jetty也被应用于一些知名产品中,例如ActiveMQ、Maven、Spark、GoogleAppEngine、Eclipse、Hadoop等。
为什么使用Jetty?
①异步的 Servlet,支持更高的并发量
②模块化的设计,更灵活,更容易定制,也意味着更高的资源利用率
③在面对大量长连接的业务场景下,Jetty 默认采用的 NIO 模型是更好的选择
④将jetty嵌入到应用中,使一个普通应用可以快速支持 http 服务
The Jetty Web Server provides an HTTP server and Servlet container capable of serving static and dynamic content either from a standalone or embedded instantiations.
From jetty-7 on, the jetty web-server and other core components are hosted by the Eclipse Foundation. The project provides:
1、Asynchronous HTTP Server
2、Standards based Servlet Container
3、websocket server
4、http/2 server
5、Asynchronous Client (http/1.1, http/2, websocket)
6、OSGI, JNDI, JMX, JASPI, AJP support
Apache Tomcat
Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。
Server是Tomcat的最顶层元素,是service的集合,即可包含多个service,Server控制整个Tomcat的生命周期。Service由一个Container和多个Connector组成(或者说由Connector,Engine和线程池[可选]组成),形成一个独立完整的处理单元,对外提供服务。
标准实现:
Servlet
JSP
Expression Language
WebSocket
Jetty与Tomcat的对比:
①Jetty 比较容易贴合第三方框架,比如你可以直接用 Spring 配置一个 Jetty 服务器
②直接可以将 Jetty 作为提供 HTTP 服务的组件,嵌入到应用中
③Jetty 是面向 Handler 的架构,而 Tomcat 是面向容器的架构
④Jetty 默认采用 NIO 技术,而 Tomcat 默认是 BIO
⑤Jetty 高度模块化,可以很灵活的管理拓展组件,而 Tomcat 对其他组件的管理则相对困难
Apache Tomcat
核心组件(Components)
Engine
Host
Context
静态资源处理
org.apache.catalina.servlets.DefaultServlet
欢迎页面(Welcome file list)
JSP处理
org.apache.jasper.servlet.JspServlet
类加载(Classloading)
Bootstrap ClassLoader
System ClassLoader
Common ClassLoader
Webapp ClassLoader
连接器(Connectors)
端口(port)
协议(protocol)
线程池(Thread Pool)
超时时间(Timeout)
JDBC 数据源(DataSource)
JNDI(Java Naming and Directory Interface)
基本类型
资源(Resource)
环境(Environment)
配置方式
context.xml 配置
web.xml 配置
Servlet 容器
Embedded Jetty
Embedded Tomcat
非 Servlet 容器
Undertow
Embedded Tomcat
静态资源处理
欢迎页面(Welcome file list)
JSP处理
类加载(Classloading)
连接器(Connectors
Embedded Tomcat
org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer