1)Jetty更輕量級。這是相對Tomcat而言的。因爲Tomcat除了遵循Java Servlet規範以外,自身還擴展了大量JEE特性以知足企業級應用的需求,因此Tomcat是較重量級的,並且配置較Jetty亦複雜許多。但對於大量普通互聯網應用而言,並不須要用到Tomcat其餘高級特性,因此在這種狀況下,使用Tomcat是很浪費資源的。這種劣勢放在分佈式環境下,更是明顯。換成Jetty,每一個應用服務器省下那幾兆內存,對於大的分佈式環境則是節省大量資源。並且,Jetty的輕量級也使其在處理高併發細粒度請求的場景下顯得更快速高效。
2)Jetty更靈活,體如今其可插拔性和可擴展性,更易於開發者對Jetty自己進行二次開發,定製一個適合自身需求的Web Server。
相比之下,重量級的Tomcat本來便支持過多特性,要對其瘦身的成本遠大於豐富Jetty的成本。用本身的理解,即增肥容易減肥難。
3)然而,當支持大規模企業級應用時,Jetty也許便須要擴展,在這場景下Tomcat即是更優的。
總結:Jetty更知足公有云的分佈式環境的需求,而Tomcat更符合企業級環境。
GAE放棄了Tomcat,選擇了Jetty,正是由於Jetty的體積和靈活性,Google能夠更好地定製一個足夠小的Java Web Server爲其GAE服務。
而Tomcat爲知足更多的企業級需求,增長了JEE特性,在服務企業級應用時,它的支持優於Jetty。然而,即便Tomcat性能略優於Jetty,但對於大多非企業級應用而言,配複雜體積龐大的Tomcat顯得過於重量級。正由於這個,實驗室的雲平臺實現即是把雲平臺自己的門戶網站放在Tomcat內,而云臺託管的Java Web應該是部署在Jetty內的。java
相同點:web
Tomcat和Jetty都是一種Servlet引擎,他們都支持標準的servlet規範和JavaEE的規範。spring
不一樣點:tomcat
Jetty的架構比Tomcat的更爲簡單bash
Jetty的架構是基於Handler來實現的,主要的擴展功能均可以用Handler來實現,擴展簡單。服務器
Tomcat的架構是基於容器設計的,進行擴展是須要了解Tomcat的總體設計結構,不易擴展。架構
Jetty和Tomcat性能方面差別不大併發
Jetty能夠同時處理大量鏈接並且能夠長時間保持鏈接,適合於web聊天應用等等。分佈式
Jetty的架構簡單,所以做爲服務器,Jetty能夠按需加載組件,減小不須要的組件,減小了服務器內存開銷,從而提升服務器性能。spring-boot
Jetty默認採用NIO結束在處理I/O請求上更佔優點,在處理靜態資源時,性能較高
Tomcat適合處理少數很是繁忙的連接,也就是說連接生命週期短的話,Tomcat的整體性能更高。
Tomcat默認採用BIO處理I/O請求,在處理靜態資源時,性能較差。
Jetty的應用更加快速,修改簡單,對新的Servlet規範的支持較好。
Tomcat目前應用比較普遍,對JavaEE和Servlet的支持更加全面,不少特性會直接集成進來。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>複製代碼
2.在Application.java 類中註冊jetty容器
@Bean
public EmbeddedServletContainerFactory servletContainer() {
JettyEmbeddedServletContainerFactory factory =
new JettyEmbeddedServletContainerFactory();
return factory;
}複製代碼