Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。

 

特性 :

1.易用性

易用性是 Jetty 设计的基本原则,易用性主要体现在以下几个方面:通过 XML 或者 API 来对Jetty进行配置;默认配置可以满足大部分的需求;将 Jetty 嵌入到应用程序当中只需要非常少的代码;

2.可扩展性

在使用了 Ajax 的 Web 2.0 的应用程序中,每个连接需要保持更长的时间,这样线程和内存的消耗量会急剧的增加。这就使得我们担心整个程序会因为单个组件陷入瓶颈而影响整个程序的性能。但是有了 Jetty:

即使在有大量服务请求的情况下,系统的性能也能保持在一个可以接受的状态。利用 Continuation 机制来处理大量的用户请求以及时间比较长的连接。 另外 Jetty 设计了非常良好的接口,因此在 Jetty 的某种实现无法满足用户的需要时,用户可以非常方便地对 Jetty 的某些实现进行修改,使得 Jetty 适用于特殊的应用程序的需求。

 

3.易嵌入性

Jetty 设计之初就是作为一个优秀的组件来设计的,这也就意味着 Jetty 可以非常容易的嵌入到应用程序当中而不需要程序为了使用 Jetty 做修改。从某种程度上,你也可以把 Jetty 理解为一个嵌入式的Web服务器。

Jetty 可以作为嵌入式服务器使用,Jetty的运行速度较快,而且是轻量级的,可以在Java中可以从test case中控制其运行。从而可以使自动化测试不再依赖外部环境,顺利实现自动化测

 

 

Jetty基本架构

Jetty目前是一个比较看好的servlet引擎,其构架比较简单,是一个可扩展性和非常灵活的服务器,它具有一个基本数据模型 Handler,所有的被扩展的组件,都可被视为一个Handler,添加到server中,jetty就是帮组管理这些Handler.

Jetty的核心组件是Server 与 Connector ,整个Server组件都是基于Handler容器工作的.其类似于Tomcat的Container容器,Connector 是负责接受客户端连接请求,并将一个请求分配给一个处理器队列去执行.

   在jetty 中有一些可有可无的组件,比如JMX,我们可以在他上面做拓展,比如定义一些Mbean 吧他加入到server中去 ,当server启动时,这些bean也会一起工作.

   

   从jetty的组件关系中,可以看出jetty的核心就是围绕着Server类来构建,Server继承了Handler,并且关联了Connector 与Container,Contaniner shi是管理Mbean的的容器,jetty 的可扩展主要是实现一个一个的Handler ,并将其加入到Server中去,Server中提供了这些Handler的访问规则.

   整个Jetty的所有组件的生命周期,都基于观察者模板设计.这一点他与Tomcat的管理是类似的.

   每个组件都有一个观察者(这里是listener类),当start,fail或者stop等事件触发时,这些listener将被调用.

   

Jetty主要提供两种Handler类型.一种是HandlerWrapper,它可以将Handler委托给另外一个类去执行,如果我们要将一个Handler加入Jetty中,那就必须将这个Handler委托给Server去调用.配合scopeHandler类,我们可以拦截Handler的执行,在调用Hander之前或之后,可以做另外的事情;另外Handler类型是HandlerCollection,这个Handler类可以将多个Handler组装在一起.构成一个Handler链.方便我们做扩展.

Jetty的入口是Server,server启动完成了,就代表jetty可以为你提供服务了.对于提供的功能,取决于他调用了那些组件的Start()方法.

   因为jetty中所有组都会继承LifeCycle.所以Server的Start方法调用就调用所有已注册到Server的组件.

   启动顺讯: 首先启动Server中的Handler,通常这个handler会有很多Handler,这些Handler组成一个Handler链,Server会依次加载Handler,接着会注册Server上JXM的Mbean,让Mbean也一起工作起来,最后启动Connector,打开端口,接受客户请求.

   

Jetty作为一个独立的Servlet引擎可以独立提供Web服务,但是也可以与其他Web应用服务器集成,所以他可以提供两种协议Http和AJP

   

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐