相同點(diǎn):
Tomcat和Jetty都是一種Servlet引擎崇呵,他們都支持標(biāo)準(zhǔn)的servlet規(guī)范和JavaEE的規(guī)范。
不同點(diǎn):
架構(gòu)比較
Jetty的架構(gòu)比Tomcat的更為簡(jiǎn)單
Jetty的架構(gòu)是基于Handler來實(shí)現(xiàn)的保礼,主要的擴(kuò)展功能都可以用Handler來實(shí)現(xiàn)杉适,擴(kuò)展簡(jiǎn)單。
Tomcat的架構(gòu)是基于容器設(shè)計(jì)的怕膛,進(jìn)行擴(kuò)展是需要了解Tomcat的整體設(shè)計(jì)結(jié)構(gòu)缀棍,不易擴(kuò)展宅此。性能比較
Jetty和Tomcat性能方面差異不大
Jetty可以同時(shí)處理大量連接而且可以長(zhǎng)時(shí)間保持連接,適合于web聊天應(yīng)用等等爬范。
Jetty的架構(gòu)簡(jiǎn)單父腕,因此作為服務(wù)器,Jetty可以按需加載組件青瀑,減少不需要的組件璧亮,減少了服務(wù)器內(nèi)存開銷,從而提高服務(wù)器性能斥难。
Jetty默認(rèn)采用NIO結(jié)束在處理I/O請(qǐng)求上更占優(yōu)勢(shì)枝嘶,在處理靜態(tài)資源時(shí),性能較高
Tomcat適合處理少數(shù)非常繁忙的鏈接哑诊,也就是說鏈接生命周期短的話躬络,Tomcat的總體性能更高。
Tomcat默認(rèn)采用BIO處理I/O請(qǐng)求搭儒,在處理靜態(tài)資源時(shí),性能較差提茁。
-
其它比較
Jetty的應(yīng)用更加快速淹禾,修改簡(jiǎn)單,對(duì)新的Servlet規(guī)范的支持較好茴扁。
Tomcat目前應(yīng)用比較廣泛铃岔,對(duì)JavaEE和Servlet的支持更加全面,很多特性會(huì)直接集成進(jìn)來峭火。
按場(chǎng)景選擇
那Jetty與Tomcat比較毁习,有哪差異呢?
Jetty更輕量級(jí)卖丸。這是相對(duì)Tomcat而言的纺且。
由于Tomcat除了遵循Java Servlet規(guī)范之外,自身還擴(kuò)展了大量JEE特性以滿足企業(yè)級(jí)應(yīng)用的需求稍浆,所以Tomcat是較重量級(jí)的载碌,而且配置較Jetty亦復(fù)雜許多。但對(duì)于大量普通互聯(lián)網(wǎng)應(yīng)用而言衅枫,并不需要用到Tomcat其他高級(jí)特性嫁艇,所以在這種情況下,使用Tomcat是很浪費(fèi)資源的弦撩。這種劣勢(shì)放在分布式環(huán)境下步咪,更是明顯。換成Jetty益楼,每個(gè)應(yīng)用服務(wù)器省下那幾兆內(nèi)存猾漫,對(duì)于大的分布式環(huán)境則是節(jié)省大量資源点晴。而且,Jetty的輕量級(jí)也使其在處理高并發(fā)細(xì)粒度請(qǐng)求的場(chǎng)景下顯得更快速高效静袖。Jetty更靈活觉鼻,體現(xiàn)在其可插拔性和可擴(kuò)展性,更易于開發(fā)者對(duì)Jetty本身進(jìn)行二次開發(fā)队橙,定制一個(gè)適合自身需求的Web Server坠陈。
相比之下,重量級(jí)的Tomcat原本便支持過多特性捐康,要對(duì)其瘦身的成本遠(yuǎn)大于豐富Jetty的成本仇矾。用自己的理解,即增肥容易減肥難解总。-
然而贮匕,當(dāng)支持大規(guī)模企業(yè)級(jí)應(yīng)用時(shí),Jetty也許便需要擴(kuò)展花枫,在這場(chǎng)景下Tomcat便是更優(yōu)的刻盐。
總結(jié):Jetty更滿足公有云的分布式環(huán)境的需求,而Tomcat更符合企業(yè)級(jí)環(huán)境劳翰。
GAE放棄了Tomcat敦锌,選擇了Jetty,正是因?yàn)镴etty的體積和靈活性佳簸,Google可以更好地定制一個(gè)足夠小的Java Web Server為其GAE服務(wù)乙墙。
而Tomcat為滿足更多的企業(yè)級(jí)需求,增加了JEE特性生均,在服務(wù)企業(yè)級(jí)應(yīng)用時(shí)听想,它的支持優(yōu)于Jetty。然而马胧,即使Tomcat性能略優(yōu)于Jetty汉买,但對(duì)于大多非企業(yè)級(jí)應(yīng)用而言,配置復(fù)雜體積龐大的Tomcat顯得過于重量級(jí)佩脊。
** 正因?yàn)檫@個(gè)录别,可以把門戶網(wǎng)站放在Tomcat內(nèi),而云臺(tái)托管的Java Web應(yīng)該是部署在Jetty內(nèi)的邻吞。**