这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

【jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?  】

 

1.背景介绍
一、什么是Tomcat

Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 9支持最新的Servlet 3.2 和JSP 2.3 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

二、什么是Jetty

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

三、什么是Resin

Resin是CAUCHO公司的产品,是一个非常流行的支持servlets和jsp的引擎,速度非常快。Resin本身包含了一个支持HTTP/1.1的WEB服务器。它不仅可以显示动态内容,而且它显示静态内容的能力也非常强,速度直逼APACHESERVER。许多站点都是使用该WEB服务器构建的

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十分出色,表现更成熟,很具备商业软件的要求。

 

一、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的支持更加全面,很多特性会直接集成进来。

 

二、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常常是整合使用


用户bPbdDlb
422 声望36 粉丝