专栏首页cwl_Java快速学习Jetty-初识Jetty

快速学习Jetty-初识Jetty

简单来讲 Jetty 就是一个 开源HTTP 服务器和Servlet 引擎,它可以为 JSP 和 Servlet 提供运行时环境。比如 Java web 应用最常用的 Servlet 容器 Tomcat。由于其轻量、灵活的特性,Jetty 也被应用于一些知名产品中,例如 ActiveMQ、Maven、Spark、GoogleAppEngine、Eclipse、Hadoop 等。

为什么要使用Jetty

  1. 异步的 Servlet,支持更高的并发量
  2. 模块化的设计,更灵活,更容易定制,也意味着更高的资源利用率
  3. 在面对大量长连接的业务场景下,Jetty 默认采用的 NIO 模型是更好的选择
  4. 将jetty嵌入到应用中,使一个普通应用可以快速支持 http 服务

作为一个开源的 HTTP 服务器和 Servlet 容器,Jetty 已经在尺寸、性能以及可拓展性上超过绝大多数其他的 WEB 服务器。因其高拓展的特性,我们可以很轻松的对其增加一些特殊的组件。当然,服务器资源是珍贵的,我们完全可以将 Jetty 中的一些不必要的组件剔除,只留下我们所需要的组件,提高对服务器资源的利用率。在性能方面,Jetty 采用的 NIO 可以让我们处理更大量级的 WebSocket 连接,当然在处理静态资源上也更快。

Jetty的基本架构

Jetty 的架构比较简单, 是一个扩展性和灵活性都非常好的服务器. 在 Jetty 中有个很重要的数据模型 Handler, Jetty 的高扩展性和灵活性主要就是来自于这个数据模型 Handler. 所有的拓展组件都可以作为一个 Handler, 而这些 Handler 都可以被添加到 Server 中, 让 Jetty 帮你进行管理. 从下图来看, Jetty 有两个核心组件, Server 和 Connector. 其中 Server 是基于 Handler 容器工作了, 提到容器, 它与 Tomcat 的 Container 比较相似. 后面会详细介绍 Jetty 与 Tomcat 的比较. 另一个核心组件就是 Connector, 他的主要职责是接收客户端请求, 并将该请求分配给一个处理队列去执行.

Jetty与Tomcat的区别

同样作为 Servlet 引擎,Tomcat 自然是不得不提的了。Tomcat 的成名时间早于 Jetty,它已经广泛的被市场接受和认可,相对于 Jetty 来说 Tomcat 还是比较稳定和成熟,尤其是在企业级应用方面,Tomcat 任然是第一选择。不过 Jetty 在架构方面的诸多优势,也让 Jetty 的市场份额不断提高。发展至今,Jetty 已经不单单只是一款 Java Web 服务器和 Servlet 容器,而是一款功能强大的工具集。他的诸多特性都能够满足现在流行的服务端架构模式,包括开发、部署以及运维。

Jetty 与 Tomcat 相比,主要的一些区别如下:

  • Jetty 可以比较方便的贴合第三方框架,比如可以直接在 Spring 中配置 Jetty 服务器、也可以将会话交给 NoSql 数据库进行管理
  • Jetty 提供组件化的方式直接将 Jetty 作为 HTTP 组件集成到应用中,从而使应用快速支持 HTTP 服务
  • 从架构上来看,Jetty 可以说是面向 Handler 的架构,它的所有组件都是基于 Handler 实现的。而 Tomcat 则是面向容器的架构,它是以容器封层的方式去提高拓展性
  • 性能方面来看,它们之间的区别主要在于处理短连接与长连接上,Tomcat 在处理生命周期较短的连接比较有优势。而 Jetty 则刚好相反,Jetty 默认采用的 NIO 技术在处理大量长连接时比较有优势,并且在静态资源的处理上 Jetty 的 NIO 也更胜一筹
  • 从功能特性来看,Jetty 的更新速度是要高于 Tomcat 的,比如 Jetty 9.3 版本开始支持 HTTP/2 的支持,而 Tomcat 9 版本才开始支持 HTTP/2
  • Jetty 的高度模块化使我们可以很方便的对一些依赖的组件进行管理,在将 Jetty 嵌入项目使用时,我们可以随便通过 Maven 去添加我们所需的一些其他的模块,如 WebSocket。而 Tomcat 在这方面则比较欠缺

综合来看,Tomcat 容器分层的架构体系更为成熟,能够满足各种场景的部署需求,而 Jetty 则更加轻量。Jetty 比较适合组件化应用,集成到应用系统中提供 HTTP 服务。Jetty 更适组件化的应用,将其集成到应用系统中提供 HTTP 服务,也适合于以更轻量的方式管理与部署应用服务,如微服务。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 快速学习Jetty-使用Jetty

    进入 官网 页面,可以选择对应的版本下载。可以看到,目前 Jetty 的最新版本是 Jetty9,这里我们使用 9.2。注意:使用 Jetty9.2+ 需要 J...

    cwl_java
  • 快速学习-Zookeeper节点类型

    1)czxid-创建节点的事务zxid 每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID。 事务ID是Zoo...

    cwl_java
  • 快速学习Jetty-idea安装Jetty

    cwl_java
  • Jetty基本介绍 及 与tomcat对比

    bin:可执行脚本文件 demo- base: etc:Jetty模块定义的XML配置文件的目录 lib:Jetty依赖的库文件 logs:Jetty的...

    高广超
  • Mathematica 11 在偏微分方程中的应用

    WolframChina
  • 智能家居系统的开源尝试

    随着智能音箱的热卖,各种各样的智能家庭解决方案也如雨后春笋,但大多数都需要专业人员和熟练工作人员来安装/部署这些解决方案。此外,这些解决方案大多无法顺利融入已有...

    半吊子全栈工匠
  • silverlight数据绑定模式TwoWay,OneWay,OneTime的研究

    asp.net开发中,数据绑定是一个很简单的概念,控件与数据绑定后,控件可以自动把数据按一定的形式显示出来。(当然控件上的值改变后,可以通过提交页面表单,同时后...

    菩提树下的杨过
  • 9-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇(用MQTT调试助手模拟APP,测试WIFI+单片机实现远程升级)

    现在的程序是挺复杂的程序,我是在原先的实现WIFI模块升级的基础上添加的,我现在看着自己写的程序都感觉错综复杂......

    杨奉武
  • Unity应用架构设计(12)——AOP思想的实践

    想象一下,当程序所有的业务逻辑都完成的时候,你可能还来不及喘口气,紧张的测试即将来临。你的Boss告诉你,虽然程序没问题,但某些方法为什么执行这么慢,性能堪忧...

    用户1161731
  • HDU 1002 高精度 大数据加法

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot...

    csxiaoyao

扫码关注云+社区

领取腾讯云代金券