Jetty的工作原理解析

Jetty是目前最活跃也是很有前景的一个Servlet引擎

Jetty的基本架构

Jetty的架构比较简单,也是可扩展性强且非常灵活的应用服务器。基本的数据模型是Handler,所有可以被扩展的组件都可作为一个Handler添加到Server中,Jetty管理这些Handler。

Jetty基本架构简介

整个Jetty核心由Server和Connector两个组件构成,Server组件是基于Handler容器工作的,类似于Tomcat的Container容器。
Jetty的工作原理解析
Jetty的工作原理解析
整个Jetty的所有组件的生命周期管理是基于观察者模板设计的,和Tomcat的管理类似。

Handler的体系结构

Jetty主要是基于Handler来设计的,Handler的体系结构影响着整个Jetty的方方面面。
Jetty的工作原理解析
Handler类型有两种:

  1. HandlerWrapper:将Handler委托给另一个类执行,配合ScopeHandler类可以拦截Handler的执行。
  2. HandlerCollection:这个Handler类可以将多个Handler组装成一起,构成一个Handler链。

Jetty的启动过程

Jetty的入口是Server类,Server类启动完成就代表Jetty可提供服务了。

  1. 首先启动设置到Server的Handler(有很多子Handler)
  2. 这些Handler将组成一个Handler链
  3. Server会启动链上所有的Handler
  4. 最后启动Connector,打开端口,接受客户端请求。

接受请求

Jetty作为独立的Servlet引擎,可独立提供Web服务器,也可与其他Web应用服务器集成,分别基于HTTP和AJP协议。
如将Jetty集成到JBoss或者Apache,那可让Jetty基于AJP模式工作。

基于HTTP工作

如前端没其他Web服务器,Jetty应给予HTTP工作,当Jetty接受一个请求时,必须按照HTTP解析请求和封装返回的数据。
Jetty创建接受连接的环境:

  1. 创建一个队列线程池,用于处理每个建立连接的任务
  2. 创建ServerSocket,用于接收客户端的Socket请求
  3. 创建一个或多个监听线程

基于AJP工作

通常的Web服务站点的后端服务器不是将Java的应用服务器直接暴露给服务访问者,而是在前面再加一个Web服务器。原因是做日志分析、负载均衡、权限控制和静态资源预加载等
Jetty的工作原理解析

基于NIO方式工作

创建一个Selector相当于一个观察者打开一个Server端通道,把这个Server通道注册到观察者并且监听事件,然后遍历观察者观察者观察到的事件,取出感兴趣的事件在处理。核心是能够统一的管理每个被观察者的事件。

与JBoss集成

JBoss是基于JMX的架构,只要符合JMX规范的系统或框架可以作为组件加到JBoss中,扩展JBoss的功能。
Jetty作为独立的Servlet引擎集成到JBoss需要集成JBoss的AbstractWebContainer类,实现的是模板模式。

与Tomcat的比较

  1. 从架构上Jetty比Tomcat更加简单;
  2. Tomcat在处理少数非常繁忙的连接上更有优势;Jetty可以同时处理大量连接而且长时间保持这些连接。
  3. Jetty默认使用NIO技术,在处理I/O请求上更占优势,Tomcat默认使用的是BIO,在处理静态资源时,Tomcat的性能较差