加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

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

发布时间:2019-03-08 01:43:34 所属栏目:业界 来源:博客园
导读:Jetty 根基架构 Jetty今朝的是一个较量被看好的 Servlet 引擎,它的架构较量简朴,也是一个可扩展性和很是机动的应用处事器。它有一个根基数据模子,这个数据模子就是 Handler(处理赏罚器),全部可以被扩展的组件都可以作为一个 Handler,添加到 Server 中,Je
副问题[/!--empirenews.page--]

Jetty

根基架构

Jetty今朝的是一个较量被看好的 Servlet 引擎,它的架构较量简朴,也是一个可扩展性和很是机动的应用处事器。它有一个根基数据模子,这个数据模子就是 Handler(处理赏罚器),全部可以被扩展的组件都可以作为一个 Handler,添加到 Server 中,Jetty 就是帮你打点这些 Handler。Jetty 中其它一个比不行少的组件是 Connector,它认真接管客户端的毗连哀求,并将哀求分派给一个处理赏罚行列去执行。

下图是 Jetty 的根基架构图,整个 Jetty 的焦点组件由 Server 和 Connector 两个组件组成,整个 Server 组件是基于 Handler 容器事变的,它相同与 Tomcat 的 Container 容器。

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

图 1. Jetty 的根基架构

Jetty 中尚有一些无关紧要的组件,我们可以在它上做扩展。如 JMX,我们可以界说一些 Mbean 把它加到 Server 中,当 Server 启动的时辰,这些 Bean 就会一路事变。

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

从上图可以看出整个 Jetty 的焦点是环绕着 Server 类来构建,Server 类担任了 Handler,关联了 Connector 和 Container,Container 是打点 Mbean 的容器。

Jetty 的 Server 的扩展首要是实现一个个 Handler 并将 Handler 加到 Server 中,Server 中提供了挪用这些 Handler 的会见法则。

整个 Jetty 的全部组件的生命周期打点是基于调查者模板计划,它和 Tomcat 的打点是相同的。

图 3. LifeCycle 的类相关图

每个组件城市持有一个调查者(在这里是 Listener 类,这个类凡是对应到调查者模式中常用的 Observer 脚色,关于调查者模式可以参考 《Tomcat体系架构与计划模式,第2部门:计划模式说明》一文中关于调查者模式的讲授)荟萃,当 start、fail 或 stop 等变乱触发时,这些 Listener 将会被挪用,这是最简朴的一种计划方法,对比 Tomcat 的 LifeCycle 要简朴的多。

系统布局

前面所述 Jetty 首要是基于 Handler 来计划的,Handler 的系统布局影响着整个 Jetty 的方方面面。下面总结了一下 Handler 的种类及浸染:

图 4. Handler 的系统布局

Jetty 首要提供了两种 Handler 范例,一种是 HandlerWrapper,它可以将一个 Handler 委托给其它一个类去执行,如我们要将一个 Handler 加到 Jetty 中,那么就必需将这个 Handler 委托给 Server 去挪用。共同 ScopeHandler 类我们可以拦截 Handler 的执行,在挪用 Handler 之前或之后,可以做一些其它的工作,相同于 Tomcat 中的 Valve(阀门);其它一个 Handler 范例是 HandlerCollection,这个 Handler 类可以将多个 Handler 组装在一路,组成一个 Handler 链,利便我们做扩展。

启动进程

Jetty 的进口是 Server 类,Server 类启动完成了,就代表 Jetty 能为你提供处事了。

它到底能提供哪些处事,就要看 Server 类启动时都挪用了哪些组件的 start 要领。

从 Jetty 的设置文件我们可以发明,设置 Jetty 的进程就是将那些类设置到 Server 的进程。下面是 Jetty 的启动时序图:

图5. 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。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读