`

Jetty

 
阅读更多

Jetty ¶

Jetty是什么? ¶

Jetty是一个用Java实现的开源的Http和Web服务器,包括HTTP server, HTTP client和javax.servlet container。

Jetty用在何处? ¶

Jetty的应用非常广泛,包括:

Jetty的特性是什么? ¶

Jetty的广泛应用得益于其诸多优秀的特性:

  • 轻量级:Jetty体积小巧,占用系统资源较少。
  • 易嵌入性:Jetty既可以像tomcat一样独立运行,也可以很方便的嵌入到工具、框架或其他应用服务器中运行。Jetty在设计之 初就是作为一个可以嵌入到其他的Java代码中的servlet容器而设计的,因此开发小组将Jetty作为一组Jar文件提供出来,可以非常方便的在自 己的容器中将Jetty实例化成一个对象并操纵该容器对象。
  • 灵活性:Jetty的体系架构及其面向接口的设计实现了功能模块高度可插拔和可扩展的特性,可以非常方便的根据需要来配置Jetty启用的功能。
  • 稳定性:Jetty运行速度较快,即使有大量服务请求并发的情况下,系统性能也能保持在一个可以接受的状态。

Jetty的体系架构 ¶

JettyArchitecture

下面分别对上图中的几个部分作简要介绍:

  • Connector负责解析服务器请求并产生应答,不同的Connector用于处理不同协议的请求。
  • Handler用于处理经过Connector解析的请求并产生应答内容,同样可以通过配置不同的Handler来负责处理不同的请求。
  • TheadPool:管理和调度多个线程,用于服务于多个连接请求。
  • Server代表一个Jetty服务器对象,主要作用是协同Connector、Handler和TheadPool的工作。

其中,!TheadPool可以根据配置选择是否使用,Connector和Handler也可以通过配置非常方便的实现替换。

Continuation机制 ¶

Continuation机制是Jetty用于更好的支持异步Servlet的机制。

首先简要介绍一下技术应用的背景。异步请求是指当客户端发送一个请求到服务器的时候,客户端不必一直等待服务器的响应,例如Web 2.0中的Ajax(Asynchronous JavaScript and XML)技术、JDBC连接池等,当服务器端响应返回时,客户端利用一个 Javascript 函数对返回值进行处理,以更新页面上的部分元素的值而不必刷新整个页面,从而带来更好的客户体验。但很多时候这种异步事件只是在很小一部分的情况下才会发 生,那么怎么保证一旦服务器端有了响应之后客户端马上就知道呢,我们有两种方法来解决这个问题,一是让浏览器每隔几秒请求服务器来获得更改,称之为轮询。 二是服务器维持与浏览器的长时间的连接来传递数据,长连接的技术称之为Comet。轮询的主要缺点是产生了大量的传输浪费;而如果使用Comet技术的 话,客户端和服务器端之间必须保持一个长连接,一般来讲,服务器端的一个Servlet会独占一个线程,如果有大量客户端维持长连接,会给服务器端的处理 能力带来很大的挑战。

针对上述情况,Jetty利用Java语言的非堵塞I/O技术来处理并发的大量连接。具体说来,Jetty实现了一个 基于java.nio API 的SelectChannelConnector,允许它维持每个连接开放而不用消耗一个线程。当连接挂起时,Connector将请求维持在未决 Continuations队列里,用来服务请求的线程返回给TheadPool,这样,该线程又可以服务于其他请求。暂停的请求停留在未决 Continuations 队列里直到指定的过期时间,或者在它的Continuation上调用resume()方法。

Jetty Vs Tomcat ¶

Tomcat作为第一款成功的web容器,具有广大的用户群体。从表面功能上Jetty和Tomcat都是差不多的,都提供Http Server和Servlet容器功能,下面我们从几个方面比较两者的差异:

  1. 从构架方面
    Tomcat主要是作为JSP/Servlet最新规范的参考实现而设计,属于学 院派,但是显得庞大而杂乱。最常见的Tomcat使用方式是将其作为一个服务器软件安装到操作系统上,然后在里面部署web应用,如果嵌入到其他JEE服 务器中以提供Web容器功能或者作为组件嵌入到其他应用中,操作起来比较麻烦。
    Jetty是由多个可以独立运行的构件通过彼此之间可插拔的接口组装在一起,其使用可以非常灵活。目前,Jetty在Geronimo、JBoss、Sybase EAServer、JOnAS和Glassfish等JEE应用服务器中提供Web容器功能。
  2. 从性能方面
    Tomcat在耗时请求连接数量不多时,也就是大多数请求能非常短的时间处理完毕的情况下,具有较好的执行效率。
    Jetty 在存在大量并发连接,大多数连接又需要更多的处理时间(业务逻辑计算占用的时间)的情况下(这种情况是目前大多数web应用具有的特点),具有更好的性能 和伸缩性。Jetty的这个优势得益于Continuation机制,这样可以把有限的内存资源更多的留给应用程序使用。在静态文件服务方面,Jetty 也具有更好的性能。这是由于Jetty使用了文件内存映射机制和NIO来对静态内容进行输入输出,这种方式将占用更少的系统内存和更快发送速度。
  3. 从标准规范方面
    Tomcat曾是sevlet2.4规范的参考实现,从Servlet2.5之后,Tomcat不再是参考实现了,Sun公司自己创建了Glassfish,并作为Servlet2.5、Servlet3.0、Jsp2.1的参考实现。
    Jetty在执行规范方面做的非常好,是Servlet2.5规范的一个优秀实现。在Servlet3.0中,Jetty自有的continuation机制也成为规范备选方案之一。
分享到:
评论

相关推荐

    jetty相关的全部jar包

    jetty-security-9.4.8.v20171121.jar,jetty-io-9.4.8.v20171121.jar,jetty-continuation-9.4.8.v20171121.jar,jetty-client-9.4.8.v20171121.jar,jetty-jmx-9.4.8.v20171121.jar,jetty-plus-9.4.8.v20171121....

    eclipse jetty插件run-jetty-run-1.3.3

    eclipse jetty插件,从...下载run-jetty-run.zip文件,解压后再编写个links文件丢到eclipse的dropins目录下即可,省去了使用eclipse update方式安装的麻烦。 link文件样例如: path=d:\\eclipse_plugins\\run-jetty-run

    jetty-6.1.26.zip

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,与Tomcat相似,它为开发和部署Web应用程序提供了一种高效的选择。Jetty在设计上注重灵活性和可扩展性,使得它在处理HTTP协议、WebSocket协议以及部署各种...

    jetty-all.jar

    Jetty-all.jar是一个集合了众多Jetty组件的综合性JAR文件,它的主要目的是为了方便开发者在项目中快速引入和使用Jetty服务器。Jetty是一个开源的HTTP服务器和Servlet容器,它以其轻量级、高性能和易用性而受到广泛...

    maven集成jetty所需jar包maven-jetty-plugin,多版本

    在Java开发领域,Maven和Jetty是两个非常重要的工具。Maven是一个项目管理工具,它可以帮助开发者管理和构建Java项目,而Jetty则是一个轻量级的嵌入式Servlet容器,常用于快速开发、测试以及部署Web应用。本文将详细...

    jetty 8及依赖包

    这个压缩包包含Jetty 8版本的实现及其依赖库,是学习和理解Jetty工作原理,尤其是NIO(非阻塞I/O)和Servlet容器实现的宝贵资源。 Jetty 8在设计时特别强调了性能和可扩展性,它使用了Java NIO(New I/O)API来处理...

    jetty 9.4.9

    Jetty 9.4.9 是一个开源的Java Web服务器和Servlet容器,以其轻量级、高效和灵活性而受到开发者的欢迎。这个版本是Jetty项目的一个重要里程碑,提供了许多性能改进和新特性。在深入探讨之前,让我们先了解一些基本...

    jetty各个版本下载

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它被广泛应用于各种规模的项目,从小型的个人项目到大型的企业级应用。Jetty以其高效、稳定和易于集成的特点,深受开发者喜爱。在本篇文章中,我们将深入...

    maven-jetty-plugin

    ** Maven Jetty Plugin 知识点详解 ** Maven Jetty Plugin是一款强大的工具,它将Jetty服务器集成到了Maven的构建流程中。这个插件允许开发者在开发过程中快速、便捷地运行和测试Java Web应用程序,而无需进行完整...

    jetty9.4.11+jetty在idea上的配置教程

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,广泛用于开发、测试和部署Web应用程序。在本文中,我们将深入探讨如何在IntelliJ IDEA(简称IDEA)这个流行的Java集成开发环境中配置Jetty 9.4.11版本。...

    Jetty9 配置使用HTTPS证书

    配置Jetty9服务器使用HTTPS证书的过程涉及多个步骤,包括申请证书、转换证书格式、以及配置Jetty服务器本身。以下详细描述这些步骤。 首先,申请证书部分通常需要借助第三方服务商,如阿里云、腾讯云等,这些服务商...

    Jetty权威指南.pdf

    ### Jetty权威指南知识点梳理 #### 一、Jetty简介 **1.1 Jetty功能介绍** Jetty是一个完全由Java编写的高性能HTTP服务器及servlet容器,它不仅能够作为一个独立的服务运行,还具备强大的可嵌入性。Jetty的设计...

    jetty 适合jdk1.8用的服务器

    Jetty是一款开源、轻量级的Web服务器和Servlet容器,被广泛用于开发、测试和部署Java Web应用程序。相较于Apache Tomcat,Jetty以其简洁的架构、高性能和低内存占用而受到开发者青睐。在选择Jetty时,必须考虑到与...

    jetty在eclipse中配置

    Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,它被广泛用于开发、测试和部署Web应用程序。Eclipse是流行的Java集成开发环境(IDE),开发者可以利用它来管理和运行项目。本教程将详细介绍如何在Eclipse...

    jetty所需jar包

    本篇文章将深入探讨Jetty所需jar包的相关知识点,帮助你理解和配置Jetty运行环境。 首先,让我们了解Jetty的核心组件和它们对应的jar包: 1. **jetty-server.jar**:这是Jetty服务器的基础,包含了处理HTTP连接和...

    idea的jetty-runner1.2.1插件

    **Jetty Runner 1.2.1 插件在 IntelliJ IDEA 中的应用** Jetty Runner 是一个用于 IntelliJ IDEA 的插件,它允许开发者快速地在 Jetty 服务器上运行 Java Web 应用程序,无需构建完整的 WAR 文件。这个插件特别适用...

    jetty9分拆的各个包下载

    jetty-alpn-client-9.2.26.v20180806.jar jetty-alpn-server-9.2.26.v20180806.jar jetty-annotations-9.2.26.v20180806.jar jetty-cdi-9.2.26.v20180806.jar jetty-client-9.2.26.v20180806.jar jetty-continuation...

    eclipse_jetty9离线插件

    Eclipse Jetty 9离线插件是专为开发者设计的一款工具,旨在简化在Eclipse集成开发环境中配置和运行Jetty服务器的过程。Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,广泛用于开发、测试和部署Web应用...

    jetty嵌入式服务器必须的jar包

    jetty嵌入式服务器开发所必须的jar包,本人使用jetty版本为6.1.3,jar包总数为9个,来自jetty:commons-el-1.0.jar,jasper-compiler-5.5.15,jasper-compiler-jdt-5.5.15.jar,jasper-runtime-5.5.15.jar,jetty-...

    jetty启动器资源配置文件

    ### Jetty启动器资源配置文件详解 #### 一、概述 Jetty是一款开源的Servlet容器,由Eclipse基金会维护。它支持最新的Java EE标准,并且具备轻量级、高性能等特点,适用于开发测试环境以及生产环境中的Web应用...

Global site tag (gtag.js) - Google Analytics