辽宁十一选五qq群|辽宁十一选五复式表

首页 | 财经 | 资源 | 理财 | 考研 | 职场 | 论文 | 资格 | 股票学院 |

股票学院: 股?#27604;?#38376; - 股票知识 - 股票术语 - 炒股技巧 - 选股技巧 - 跟庄技巧 - 炒股经验 - 投资策略 - K线图 - 均线 - 分时图 - 成交量 - 波浪理论 - 基本面分析 - 心理分析 - 涨停研究 - 趋势线 - 江恩理论 - MACD - KDJ - 技术指标 - 财经股票书籍在线阅读 - 金融类书籍下载 - 银行学院 - 保险学院 - 外汇学院 - 债券学院 - 股票学院 - 基金学院 - 港股学院 - 黄金学院

当前位置:天下金融网 > 金融云 > 文章正文

详解Web容器 - Jetty与Tomcat孰强孰弱

时间:2019-03-08 04:50:38来源:博客园作者:佚名

Jetty

基本架构

Jetty目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器。它有一个基本数据模型,这个数据模型就是 Handler(处理器),所有可以被扩展的组件都可以作为一个 Handler,添加到 Server 中,Jetty 就?#21069;?#20320;管理这些 Handler。Jetty 中另外一个比不可少的组件是 Connector,它负责接受客户端的连接请求,并将请求分配给一个处理队列去执行。

下图是 Jetty 的基本架构图,整个 Jetty 的核心组件由 Server 和 Connector 两个组件构成,整个 Server 组件是基于 Handler 容器工作的,它类似与 Tomcat 的 Container 容器。

详解Web容器 - Jetty与Tomcat孰强孰弱

图 1. Jetty 的基本架构

Jetty 中还有一些可有可无的组件,我?#24378;?#20197;在它上做扩展。如 JMX,我?#24378;?#20197;定义一些 Mbean 把它加到 Server 中,当 Server 启动的时候,这些 Bean 就会一起工作。

详解Web容器 - Jetty与Tomcat孰强孰弱

图 2. Jetty 的主要组件的类图

?#30001;?#22270;可以看出整个 Jetty 的核心是围绕着 Server 类来构建,Server 类继承了 Handler,关联了 Connector 和 Container,Container 是管理 Mbean 的容器。

Jetty 的 Server 的扩展主要是实现一个个 Handler 并将 Handler 加到 Server 中,Server 中提供了调用这些 Handler 的访问规则。

整个 Jetty 的所有组件的生命周期管理是基于观察者模板设计,它和 Tomcat 的管理是类似的。

详解Web容器 - Jetty与Tomcat孰强孰弱

图 3. LifeCycle 的类关系图

每个组件都会持有一个观察者(在这里是 Listener 类,这个类通常对应到观察者模式中常用的 Observer ?#24039;?#20851;于观察者模式可以参考 《Tomcat系统架构与设计模式,第2部分:设计模式分析》一文中关于观察者模式的讲解)集合,当 start、fail 或 stop 等事件触发时,这些 Listener 将会被调用,这是最简单的一种设计方式,相比 Tomcat 的 LifeCycle 要简单的多。

体系结构

前面所述 Jetty 主要是基于 Handler 来设计的,Handler 的体系结构影响着整个 Jetty 的方方面面。下面总结了一下 Handler 的种类及作用:

详解Web容器 - Jetty与Tomcat孰强孰弱

图 4. Handler 的体系结构

Jetty 主要提供了两种 Handler 类型,一种是 HandlerWrapper,它可以将一个 Handler 委托给另外一个类去执行,如我们要将一个 Handler 加到 Jetty 中,那么就必须将这个 Handler 委托给 Server 去调用。配合 ScopeHandler 类我?#24378;?#20197;拦截 Handler 的执行,在调用 Handler 之前或之后,可以做一些另外的事情,类似于 Tomcat 中的 Valve(阀门);另外一个 Handler 类型是 HandlerCollection,这个 Handler 类可以将多个 Handler 组装在一起,构成一个 Handler 链,方便我们做扩展。

启动过程

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

它到底能提供哪些服务,就要看 Server 类启动时都调用了哪些组件的 start 方法。

从 Jetty 的配置文件我?#24378;?#20197;发现,配置 Jetty 的过程就是将那些类配置到 Server 的过程。下面是 Jetty 的启动时序图:

详解Web容器 - Jetty与Tomcat孰强孰弱

图5. Jetty启动时序图

因为 Jetty 中所有的组件都会继承 LifeCycle,所以 Server 的 start 方法调用就会调用所有已经注册到 Server 的组件,Server 启动其它组件的?#25215;?#26159;:

启动设置到 Server 的 Handler(通常这个 Handler 会有很多子 Handler,这些 Handler 将组成一个 Handler 链,Server 会?#26469;?#21551;动这个链上的所有 Handler);

接着会启动注册在 Server 上 JMX 的 Mbean,让 Mbean 也一起工作起来;

最后会启动 Connector,打开端口,接受客户端请求。

接受请求

Jetty 作为一个独立的 Servlet 引擎可以独立提供 Web 服务,但是它也可以与其他 Web 应用服务器集成,所以它可以提供基于两?#20013;?#35758;工作,一个是 HTTP,一个是 AJP 协议。

如果将 Jetty 集成到 Jboss 或者 Apache,那么就可以让 Jetty 基于 AJP 模式工作。

下面分别介绍 Jetty 如何基于这两?#20013;?#35758;工作,以及如何建立连接和接受请求的。

基于 HTTP 协议工作

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

我?#24039;?#32622; Jetty 的 Connector 实现类为 org.eclipse.jetty.server.bi.SocketConnector ,让 Jetty 以 BIO 的方式工作。

  • Jetty 在启动时将会创建 BIO 的工作环?#24120;?#23427;会创建 HttpConnection 类用来解析和封装 HTTP1.1 的协议。
  • ConnectorEndPoint 类负责以 BIO 的处理方式处理连接请求;
  • ServerSocket 负责建立 socket 连接接受和传送数据;
  • Executor 负责处理连接的线程池,处理每一个请求队列中的任务;
  • acceptorThread 是监听连接请求,一有 socket 连接,它将进入下面的处理流程;

当 socket 被真正执行时,HttpConnection 将被调用,这里定义了如何将请求传递到 servlet 容器里,又如何将请求最?#31456;?#30001;到目的 servlet。

相关阅读

焦点图文

关于我们 | 广告服务 | 商务合作 | 网站地图

版权所有 Copyright(C)2018-2020 苏州骐云跃网络科技有限公司,未经授权禁止复制或建立镜像,否则将依法追究法律责任!
声明:我们不做任何?#38382;?#30340;代客理财及投资指导,凡是以天下金融网名义做股票推荐的行为均属违法!
广告商的言论与行为均与天下金融网无关!股市有风险,投资需谨慎。
?#23637;?#32593;安备 32050502000166号
苏ICP备14018528号
商务合作:联系我们

天下金融网版权所有
辽宁十一选五qq群