jetty的工作原理

Jetty 的启动过程

Jetty 的入口是 Server类,Server 类启动完成了,就代表 Jetty 能为你提供服务了。它到底能提供哪些服务,就要看 Server 类启动时都调用了其它组件的 start方法。从 Jetty 的配置文件我们可以发现,配置 Jetty 的过程就是将那些类配置到 Server 的过程。下面是 Jetty 的启动时序图:

图 4. Jetty 的启动流程

因为 Jetty 中所有的组件都会继承LifeCycle,所以 Server 的 start 方法调用就会调用所有已经注册到 Server 的组件,Server启动其它组件的顺序是:首先启动设置到 Server 的 Handler,通常这个 Handler 会有很多子 Handler,这些 Handler 将组成一个Handler 链。Server 会依次启动这个链上的所有
Handler。接着会启动注册在 Server 上 JMX 的 Mbean,让 Mbean也一起工作起来,最后会启动 Connector,打开端口,接受客户端请求,启动逻辑非常简单。

回页首

接受请求

Jetty 作为一个独立的Servlet 引擎可以独立提供 Web 服务,但是它也可以与其他 Web 应用服务器集成,所以它可以提供基于两种协议工作,一个是 HTTP,一个是 AJP协议。如果将 Jetty 集成到 Jboss 或者 Apache,那么就可以让 Jetty 基于 AJP 模式工作。下面分别介绍 Jetty如何基于这两种协议工作,并且它们如何建立连接和接受请求的。

基于 HTTP 协议工作

如果前端没有其它 web 服务器,那么Jetty 应该是基于 HTTP 协议工作。也就是当 Jetty 接收到一个请求时,必须要按照 HTTP 协议解析请求和封装返回的数据。那么 Jetty是如何接受一个连接又如何处理这个连接呢?

我们设置 Jetty 的Connector 实现类为 org.eclipse.jetty.server.bi.SocketConnector 让 Jetty 以 BIO的方式工作,Jetty 在启动时将会创建 BIO 的工作环境,它会创建 HttpConnection 类用来解析和封装 HTTP1.1的协议,ConnectorEndPoint 类是以 BIO 的处理方式处理连接请求,ServerSocket
是建立 socket连接接受和传送数据,Executor 是处理连接的线程池,它负责处理每一个请求队列中任务。acceptorThread 是监听连接请求,一有 socket连接,它将进入下面的处理流程。

当 socket被真正执行时,HttpConnection 将被调用,这里定义了如何将请求传递到 servlet 容器里,有如何将请求最终路由到目的servlet,关于这个细节可以参考《 servlet 工作原理解析》一文。

下图是 Jetty启动创建建立连接的时序图:

图 5. 建立连接的时序图

Jetty创建接受连接环境需要三个步骤:

  1. 创建一个队列线程池,用于处理每个建立连接产生的任务,这个线程池可以由用户来指定,这个和 Tomcat是类似的。
  1. 创建 ServerSocket,用于准备接受客户端的 socket
    请求,以及客户端用来包装这个 socket的一些辅助类。
  2. 创建一个或多个监听线程,用来监听访问端口是否有连接进来。

相比 Tomcat创建建立连接的环境,Jetty 的逻辑更加简单,牵涉到的类更少,执行的代码量也更少了。

当建立连接的环境已经准备好了,就可以接受HTTP 请求了,当 Acceptor 接受到 socket 连接后将转入下图所示流程执行:

图 6. 处理连接时序图

Accetptor线程将会为这个请求创建 ConnectorEndPoint。HttpConnection 用来表示这个连接是一个 HTTP 协议的连接,它会创建HttpParse 类解析 HTTP 协议,并且会创建符合 HTTP 协议的 Request 和 Response对象。接下去就是将这个线程交给队列线程池去执行了。

参考:http://www.ibm.com/developerworks/cn/java/j-lo-jetty/

时间: 2024-10-29 21:45:38

jetty的工作原理的相关文章

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

Jetty 应该是目前最活跃也是很有前景的一个 Servlet 引擎.本文将介绍 Jetty 基本架构与基本的工作原理:您将了解到 Jetty 的基本体系结构:Jetty 的启动过程:Jetty 如何接受和处理用户的请求.你还将了解到 AJP 的一些细节:Jetty 如何基于 AJP 工作:以及 Jetty 如何集成到 Jboss:最后我们将比较一下两个 Servlet 引擎:Tomcat 和 Jetty 的优缺点. Jetty 的基本架构 Jetty 目前的是一个比较被看好的 Servlet

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

Jetty 应该是目前最活跃也是很有前景的一个 Servlet 引擎.本文将介绍 Jetty 基本架构与基本的工作原理:您将了解到 Jetty 的基本体系结构:Jetty 的启动过程:Jetty 如何接受和处理用户的请求.你还将了解到 AJP 的一些细节:Jetty 如何基于 AJP 工作:以及 Jetty 如何集成到 Jboss:最后我们将比较一下两个 Servlet 引擎:Tomcat 和 Jetty 的优缺点. Jetty 的基本架构 Jetty 目前的是一个比较被看好的 Servlet

Jetty 的工作原理以及与 Tomcat 的比较:摘自IBM

Jetty 应该是目前最活跃也是很有前景的一个 Servlet 引擎.本文将介绍 Jetty 基本架构与基本的工作原理:您将了解到 Jetty 的基本体系结构:Jetty 的启动过程:Jetty 如何接受和处理用户的请求.你还将了解到 AJP 的一些细节:Jetty 如何基于 AJP 工作:以及 Jetty 如何集成到 Jboss:最后我们将比较一下两个 Servlet 引擎:Tomcat 和 Jetty 的优缺点. 12 评论: 许 令波, Java 工程师, 淘宝网 2011 年 9 月 2

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

Jetty 的基本架构 Jetty 目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器,它有一个基本数据模型,这个数据模型就是 Handler,所有可以被扩展的组件都可以作为一个 Handler,添加到 Server 中,Jetty 就是帮你管理这些 Handler. Jetty 的基本架构 下图是 Jetty 的基本架构图,整个 Jetty 的核心组件由 Server 和 Connector 两个组件构成,整个 Server 组件是基于 H

Servlet 工作原理解析

-----转自许令波老师Servlet 工作原理解析  感觉写的很不错,保存下来,留着以后温习 从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与 Servlet 容器的关系有点像枪和子弹的关系,枪是为子弹而生,而子弹又让枪有了杀伤力.虽然它们是彼此依存的,但是又相互独立发展,这一切都是为了适应工业化生产的结果.从技术角度来说是为了解耦,通过标准化接口来相互协作.既然接口是连接 Servlet 与 Servlet 容器的关键,那我们就

【Tomcat】Servlet 工作原理解析

Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的基本要求.本文将带你认识 Java Web 技术是如何基于 Servlet 工作,你将知道:以 Tomcat 为例了解 Servlet 容器是如何工作的?一个 Web 工程在 Servlet 容器中是如何启动的? Servlet 容器如何解析你在 web.xml 中定义的 Servlet ?用户的请

【Java】Servlet 工作原理解析

Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的基本要求.本文将带你认识 Java Web 技术是如何基于 Servlet 工作,你将知道:以 Tomcat 为例了解 Servlet 容器是如何工作的?一个 Web 工程在 Servlet 容器中是如何启动的? Servlet 容器如何解析你在 web.xml 中定义的 Servlet ?用户的请

走进JavaWeb技术世界4:Servlet 工作原理详解

本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下Star哈 文章首发于我的个人博客: www.how2playlife.com 本文是微信公众号[Java技术江湖]的<走进JavaWeb技术世界>其中一篇,本文部分内容来源于网络,为了把本文主题讲得清晰透彻,也整合了很多我认为不错的技术博客内容,引用其中了一些比较好的博客文章,如有侵权,请联系作

理解Tomcat工作原理

WEB服务器 只要Web上的Server都叫Web Server,但是大家分工不同,解决的问题也不同,所以根据Web Server提供的功能,每个Web Server的名字也会不一样. 按功能分类,Web Server可以分为: |- Web Server |- Http Server |- Application Server |- Servlet Container |- CGI Server |- ...... Http服务器 HTTP Server本质上也是一种应用程序——它通常运行在服