Jetty,是一个Servlet引擎[1],即是一个开源的Servlet容器,是基于Java的Web容器。它是使用Java语言编写的,其API以一组JAR包的形式发布[2]。
Jetty的基本数据模型是Handler,其架构比较简单,其核心组件由Server和Connector两个组件构成,整个Server组件是基于Handler容器工作的,Connector组件负责接受客户端的连接请求,并将请求分配给一个处理队列去执行。Jetty中还有JMX等一些其他的组件[1]。
从某种程度上,可以把Jetty理解为一个嵌入式的Web服务器。Jetty可以作为嵌入式服务器使用,运行速度较快,而且是轻量级的,可以让Java从test case中控制其运行,从而使自动化测试不再依赖外部环境,顺利实现自动化测试[2]。
历史
Jetty最初由软件工程师Greg Wilkins在悉尼的郊区巴尔曼开发,起初名为IssueTracker,后更名为MBServler,最终定名为Jetty。自1995年起,Jetty经历了多次迁移和重要更新,包括从MortBay到sourceforge.net,再到codehaus.org,最后在2009年核心部件转移到Eclipse.org。2016年,Jetty的代码主仓库迁移到了Github,继续在Eclipse IP Process政策下开发。
版本发布
版本托管于Java版本协议Servlet版本JSP版本状态9.4.xEclipse1.8HTTP/1.1, HTTP/2, WebSocket JSR3563.12.3稳定(自2016年12月12日)9.3.xEclipse1.8HTTP/1.1, HTTP/2, WebSocket JSR3563.12.3稳定(自2015年2月25日)9.2.xEclipse1.7HTTP/1.1, WebSocket JSR356, SPDY3.12.3稳定(自2014年4月16日)9.1.xEclipse1.7HTTP/1.1, WebSocket JSR356, SPDY3.12.3稳定(自2013年11月18日)9.0.xEclipse1.7HTTP/1.1, WebSocket, SPDY3.0(跟踪3.1版草案)2.2稳定(自2013年3月8日)8.xEclipse,Codehaus1.6HTTP/1.1, WebSocket, SPDY3.02.1产品生命周期结束7.xEclipse,Codehaus1.5, J2MEHTTP/1.1, WebSocket, SPDY2.52.1产品生命周期结束6.xCodehaus1.4–1.5HTTP/1.12.52.0已剔除5.xSourceforge1.2–1.5HTTP/1.12.42.0不推荐4.xSourceforge1.2, J2MEHTTP/1.12.31.2古老的3.xSourceforge1.2HTTP/1.1 RFC20682.21.1化石态2.xMortbay1.1HTTP/1.0 RFC19452.11.0传奇态1.xMortbay1.0HTTP/1.0 RFC1945神话态
特性
Jetty设计的基本原则之一是易用性,它可以通过XML或API进行配置,且默认配置能满足大多数需求。将Jetty嵌入到应用程序中只需很少的代码。
Jetty适用于使用Ajax的Web2.0应用程序,能够处理大量服务请求和长时间连接,不会因单个组件而影响整体性能。它利用Continuation机制处理大量用户请求和长连接,并提供良好的接口,方便用户根据需要修改Jetty的实现。
易嵌入性
Jetty设计为易于嵌入的组件,可以无需修改程序即可集成到应用程序中。它运行速度快,是轻量级的,适合在Java中进行自动化测试。
应用
Jetty在嵌入式Java应用程序中广泛使用,是Eclipse IDE的组成部分,支持AJP、JASPI、JMX、JNDI、OSGi、WebSocket等技术。Apache Hadoop就是使用Jetty作为Web服务器的典型例子,其中NameNode和JobTracker通过Jetty呈现管理页面,而TaskTracker使用Jetty接收映射和洗牌操作,尽管在Hadoop 0.23版后,洗牌操作已改用Netty。
和Tomcat比较
Jetty相对于Tomcat更轻量级,更适合不需要Tomcat高级特性的普通互联网应用。Jetty的轻量级和灵活性使其在处理高并发细粒度请求的场景下更快速高效。而Tomcat则更适合支持大规模企业级应用。总的来说,Jetty更满足公有云的分布式环境需求,而Tomcat更符合企业级环境。
代码实例
参考资料 2
- 参考 1
- 参考 2
