这里是修真院后端小课堂,每篇分享文从javascript
【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】html
八个方面深度解析后端知识/技能,本篇分享的是:java
【jetty,resin,tomcat的差异在哪里,在线上服务应该选择哪种WEB服务器? 】linux
1.背景介绍
1、什么是Tomcatweb
Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其余一些公司及我的共同开发而成。因为有了Sun 的参与和支持,最新的Servlet 和JSP 规范老是能在Tomcat 中获得体现,Tomcat 9支持最新的Servlet 3.2 和JSP 2.3 规范。由于Tomcat 技术先进、性能稳定,并且免费,于是深受Java 爱好者的喜好并获得了部分软件开发商的承认,成为目前比较流行的Web 应用服务器。后端
2、什么是Jettytomcat
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员能够将Jetty容器实例化成一个对象,能够迅速为一些独立运行(stand-alone)的Java应用提供网络和web链接。服务器
3、什么是Resin网络
Resin是CAUCHO公司的产品,是一个很是流行的支持servlets和jsp的引擎,速度很是快。Resin自己包含了一个支持HTTP/1.1的WEB服务器。它不只能够显示动态内容,并且它显示静态内容的能力也很是强,速度直逼APACHESERVER。许多站点都是使用该WEB服务器构建的session
2.知识剖析
tomcat架构:
Tomcat是一个HTTP服务器,同时也是一个Servlet容器(能够执行Servlet文件,JSP、JSF会被转换成Servlet),支持多种功能,所以采用了分层、模块化的设计。
配置文件内容
<?xml version='1.0' encoding='utf-8'?>
<Server>
<Service>
<Connector/>
<Engine>
<Host></Host>
</Engine>
</Service>
</Server>
jetty架构:
Jetty Server是一个Connector集合和一个Handler集合间的管道,Connector用于接收HTTP链接,Handler服务来自链接的请求并做出响应,Jetty Server使用来自一个线程池的线程来处理这些工做。
当Jetty请求/响应源自Servlet API时,Servelet API的完整特征只有你配置适当的handler才是可用的。例如,在请求中的session API只有当请求被传递给一个Session Handler时才被激活。若是servlet不被要求,只有不多的开销用于servlet请求/响应API。所以你能构建一个仅用connector和handler的Jetty Server,不用servlet。
配置Jetty的工做是构建一个connector和handler的网络,并提供他们各自的配置。因为Jetty这句践是简单的POJO(Plain Old Java Object),你能完成经过各类方法完成组件的集成和配置:
1)代码;
2)使用Jetty XML;
3)使用依赖注入框架:Spring或者XBean;
4)使用Jetty WebApp和Context Deployer。
resin:
Resin提供了最快的jsp/servlets运行平台。在java和javascript的支持下,Resin能够为任务灵活选用合适的开发语言。Resin的一种先进的语言XSL(XML stylesheet language)可使得形式和内容相分离。 若是您选用jsp平台做为internet商业站点的支持,那么速度、价格和稳定性都是要考虑到的,resin十分出色,表现更成熟,很具有商业软件的要求。
1、tomcat和jetty的比较
相同点:
Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。
不一样点:
1.架构比较
Jetty的架构比Tomcat的更为简单
Jetty的架构是基于Handler来实现的,主要的扩展功能均可以用Handler来实现,扩展简单。
Tomcat的架构是基于容器设计的,进行扩展是须要了解Tomcat的总体设计结构,不易扩展。
2.性能比较
Jetty和Tomcat性能方面差别不大
Jetty能够同时处理大量链接并且能够长时间保持链接,适合于web聊天应用等等。
Jetty的架构简单,所以做为服务器,Jetty能够按需加载组件,减小不须要的组件,减小了服务器内存开销,从而提升服务器性能。
Jetty默认采用NIO结束在处理I/O请求上更占优点,在处理静态资源时,性能较高
少数很是繁忙;Tomcat适合处理少数很是繁忙的连接,也就是说连接生命周期短的话,Tomcat的整体性能更高。
Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。
3.其它比较
Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。
Tomcat目前应用比较普遍,对JavaEE和Servlet的支持更加全面,不少特性会直接集成进来。
2、tomcat和resin的区别
特征
Tomcat
Resin
所属公司
Apache
CAUCHO
用户数
多
少
可参考文档
多
少
与Eclipse集成复杂度
适中
较复杂。
Eclipse下调试开发
简便
复杂,更新类后会自动重启
部署环境启动 臃肿
人性化
开发环境热部署支持
较好,可根据须要配置。修改Jsp或java文件时,可配置是否重启服务
较差,更新class及jsp文件,系统都会自动从新部署,并重启,配置了Session会话时开发比较麻烦
生产环境下热部署支持
通常。更新配置文件时,必须手动重启。更新其余文件时,大部分不用重启。但一次性更新太多文件时,常常会形成Tomcat重启失败。
较好。更新配置文件时,Resin会自动重启。
集群部署
支持
支持
3.常见问题
1,在线上服务应该选择哪种web服务器?
2,为何要选择jetty?
3,jetty与tomcat的比较?
4.解决方案
1,这些服务器各有优劣,选择服务器时应该先参考项目,预估规模大小等。好比大规模的企业级应用,Tomcat自身扩展了大量JEE特性可知足企业级应用的需求, 因此这种状况下应选用Tomcat。
2,Jetty是Java领域另外一个出色的Web服务器,它一样也是开源的。与tomcat不一样的是它可做为一个嵌入式服务器。也就是说,若是咱们在应用中加入jetty的核心jar文件,应用便可对外提供http服务。它同时也是平台无关的java web服务器,既能够在Windos平台上运行,也能够在Linux平台上运行。
3,单纯比较Tomcat和Jetty的性能意义不是很大,只能说在某些使用场景下它们的表现各有差别,由于它们面向的使用场景不尽相同。从架构上来看Tomcat在处理少数很是繁忙的链接上更有优点,也就是链接的生命周期若是比较短,Tomcat的性能比较优。
而Jetty则刚好相反,Jetty能够同时处理大量连接而且长时间的保持这些连接,例如,一些Web聊天应用很是适合用Jetty服务器,淘宝的Web 旺旺就是用Jetty做为Servlet引擎
5.编码实战
6.扩展思考
这几个服务器各有优缺点,那一个网站部署服务器时,应该怎么选择才能够保证更加高效的运行呢?
7.参考文献
https://www.cnblogs.com/fengl...
http://www.linuxidc.com/Linux...
8.更多讨论
1.tomcat解决了哪些问题?
tomcat是servlet容器,它能够帮咱们对接http请求(作些通用处理),而后将请求转发到咱们的servlet处理器进行处理,咱们只须要把本身的业务处理放在servlet的service方法便可,不须要关注其余多余的事情。
2.什么是Apache?
Apache HTTP服务器是一个模块化的服务器,能够运行在几乎全部普遍使用的计算机平台上。其属于应用服务器。Apache支持支持模块多,性能稳定,Apache自己是静态解析,适合静态HTML、图片等,但能够经过扩展脚本、模块等支持动态页面等。
3.Apache与Tomcat的比较 ?
Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等),而Tomcat是Apache组织在符合Java EE的JSP、Servlet标准下开发的一个JSP服务器. Apache是一个Web服务器环境程序,启用他能够做为Web服务器使用,不过只支持静态网页如(ASP,PHP,CGI,JSP)等动态网页的就不行。若是要在Apache环境下运行JSP的话就须要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat。 Apache:侧重于HTTPServer ,Tomcat:侧重于Servlet引擎,若是以Standalone方式运行,功能上与Apache等效,支持JSP,但对静态网页不太理想; Apache是Web服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,能够认为是Apache的扩展,可是能够独立于Apache运行。 实际使用中Apache与Tomcat经常是整合使用