简介
1、什么是jetty
查了一下百度百科,给了这么一个描述,Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。 简单点说,某种程度上,也可以把 Jetty 理解为一个嵌入式的Web服务器,Jetty的运行速度较快,而且是轻量级的,可以在Java中从test case中控制其运行。从而可以使自动化测试不再依赖外部环境,顺利实现自动化测试。
2、jetty的特性
易用性是 Jetty 设计的基本原则。 通过 XML 或者 API 来对Jetty进行配置;默认配置可以满足大部分的需求,将 Jetty 嵌入到应用程序当中只需要非常少的代码。
可扩展性,在 Jetty 的某种实现无法满足用户的需要时,用户可以非常方便地对 Jetty 的某些实现进行修改,使得 Jetty 适用于特殊的应用程序的需求。
易嵌入性,Jetty 可以非常容易的嵌入到应用程序当中而不需要程序为了使用 Jetty 做修改。
3、基本架构
Jetty目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器。
它有一个基本数据模型,这个数据模型就是 Handler(处理器),所有可以被扩展的组件都可以作为一个 Handler,添加到 Server 中,Jetty 就是帮你管理这些 Handler。
下图是 Jetty 的基本架构图,整个 Jetty 的核心组件由 Server 和 Connector 两个组件构成,整个 Server 组件是基于 Handler 容器工作的,类似与 Tomcat 的 Container 容器。
Jetty 中另外一个必不可少的组件是 Connector,负责接受客户端的连接请求,并将请求分配给一个处理队列去执行。
基本架构图4、体系结构
前面所述 Jetty 主要是基于 Handler 来设计的,Handler 的体系结构影响着整个 Jetty 的方方面面。下面总结了一下 Handler 的种类及作用:
Handler体系结构图Jetty 主要提供了两种 Handler 类型,一种是 HandlerWrapper,它可以将一个 Handler 委托给另外一个类去执行,如我们要将一个 Handler 加到 Jetty 中,那么就必须将这个 Handler 委托给 Server 去调用。配合 ScopeHandler 类我们可以拦截 Handler 的执行,在调用 Handler 之前或之后,可以做一些另外的事情,类似于 Tomcat 中的 Valve(阀门);另外一个 Handler 类型是 HandlerCollection,这个 Handler 类可以将多个 Handler 组装在一起,构成一个 Handler 链,方便我们做扩展。
5、工作过程
(1)启动
(2)接受请求
(3)基于http协议工作
(4)基于AJP工作
(5)基于 NIO 方式工作
(6)处理请求
(7)与 Jboss 集成
更多详细介绍可参考Tomcat与Jetty比较
6、总结
区别于Tomcat Jetty更轻量级,更灵活,Tomcat偏向于重量级,总结起来就是Jetty更满足公有云的分布式环境的需求,而Tomcat更符合企业级环境。此外,Jetty 的 NIO 处理方式和 Tomcat 的几乎一样,唯一不同的地方是在如何把监听到事件分配给对应的连接的处理方式。从测试效果来看 Jetty 的 NIO 处理方式更加高效。
安装测试
进入官网https://www.eclipse.org/jetty/download.html下载jetty,建议下载Zip文件。 相比Tomcat,jetty是免安装的插件,直接解压到对应目录即可使用,以win7系统为例。
1、在起始栏输入cmd进入DOS操作系统,然后进入jetty的根目录,即解压缩的目录
2、输入java -jar start.jar命令启动运行jetty,
图1为启动成功,正常运行界面
图13、在浏览器URL输入http://localhost:8080,如图2所示,返回error404,不慌,请看下一步
图24、将个人项目复制到jetty的webapps目录下在浏览器输入http://localhost:8080/项目名/WebRoot/文件名,运行成功,页面正常显示,如图3
图3注意:此处区别于Tomcat,jetty的URL中必须加上WebRoot,否则会返回报错404,如图4
图4
网友评论