這裏是修真院後端小課堂,每篇分享文從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經常是整合使用