首頁:
http://jetty.codehaus.org/jetty/
參考自:
http://blog.csdn.net/zhaozheng7758/article/details/6101346
http://www.cnblogs.com/lexus/archive/2011/08/23/2150191.html
http://www.cnblogs.com/yangchao/archive/2011/03/26/2044393.html
http://www.ibm.com/developerworks/cn/web/wa-lo-jetty/
一 Jetty是什嗎? Jetty是一個用Java實現的開源的Http和Web伺服器,包括HTTP server, HTTP client和javax.servlet container。類似於tomcat,websphere,glassfish,jboss等。二 Jetty用在何處?Jetty的應用非常廣泛,包括:大型叢集系統,如Yahoo Hadoop Cluster( http://developer.yahoo.net/hadoop/)雲端運算服務,如Google AppEngine ( http://code.google.com/appengine/)SaaS(Software-as-a-service)系統,如Yahoo! Zimbra( http://www.zimbra.com/)應用程式伺服器,如Apache Geronimo( http://geronimo.apache.org/)應用程式框架,如GWT( http://code.google.com/webtoolkit/)工具,如 Eclipse IDE( http://www.eclipse.org/)行動裝置,i-jetty( http://code.google.com/p/i-jetty/)三 Jetty的特性是什嗎?Jetty的廣泛應用得益於其諸多優秀的特性:輕量級:Jetty體積小巧,佔用系統資源較少。易嵌入性:Jetty既可以像tomcat一樣獨立運行,也可以很方便的嵌入到工具、架構或其他應用伺服器中運行。Jetty在設計之 初就是作為一個可以嵌入到其他的Java代碼中的servlet容器而設計的,因此開發小組將Jetty作為一組Jar檔案提供出來,可以非常方便的在自己的容器中將Jetty執行個體化成一個對象並操縱該容器物件。靈活性:Jetty的體系架構及其面向介面的設計實現了功能模組高度可插拔和可擴充的特性,可以非常方便的根據需要來配置Jetty啟用的功能。穩定性:Jetty運行速度較快,即使有大量服務要求並發的情況下,系統效能也能保持在一個可以接受的狀態。四 Jetty的體系架構下面分別對中的幾個部分作簡要介紹:Connector負責解析伺服器請求併產生應答,不同的Connector用於處理不同協議的請求。Handler用於處理經過Connector解析的請求併產生應答內容,同樣可以通過配置不同的Handler來負責處理不同的請求。TheadPool:管理和調度多個線程,用於服務於多個串連請求。Server代表一個Jetty伺服器對象,主要作用是協同Connector、Handler和TheadPool的工作。其中,!TheadPool可以根據配置選擇是否使用,Connector和Handler也可以通過配置非常方便的實現替換。五 Continuation機制Continuation機制是Jetty用於更好的支援非同步Servlet的機制。首先簡要介紹一下技術應用的背景。非同步請求是指當用戶端發送一個請求到伺服器的時候,用戶端不必一直等待伺服器的響應,例如Web 2.0中的Ajax(Asynchronous JavaScript and XML)技術、JDBC串連池等,當伺服器端響應返回時,用戶端利用一個 Javascript 函數對傳回值進行處理,以更新頁面上的部分元素的值而不必重新整理整個頁面,從而帶來更好的客戶體驗。但很多時候這種非同步事件只是在很小一部分的情況下才會發 生,那麼怎麼保證一旦伺服器端有了響應之後用戶端馬上就知道呢,我們有兩種方法來解決這個問題,一是讓瀏覽器每隔幾秒請求伺服器來獲得更改,稱之為輪詢。 二是伺服器維持與瀏覽器的長時間的串連來傳遞資料,長串連的技術稱之為Comet。輪詢的主要缺點是產生了大量的傳輸浪費;而如果使用Comet技術的話,用戶端和伺服器端之間必須保持一個長串連,一般來講,伺服器端的一個Servlet會獨佔一個線程,如果有大量用戶端維持長串連,會給伺服器端的處理 能力帶來很大的挑戰。針對上述情況,Jetty利用Java語言的非堵塞I/O技術來處理並發的大量串連。具體說來,Jetty實現了一個基於java.nio API 的SelectChannelConnector,允許它維持每個串連開放而不用消耗一個線程。當串連掛起時,Connector將請求維持在未決 Continuations隊列裡,用來服務要求的線程返回給TheadPool,這樣,該線程又可以服務於其他請求。暫停請求停留在未決 Continuations 隊列裡直到指定的到期時間,或者在它的Continuation上調用resume()方法。六 Jetty Vs Tomcat Tomcat作為第一款成功的web容器,具有廣大的使用者群體。從表面功能上Jetty和Tomcat都是差不多的,都提供Http Server和Servlet容器功能,下面我們從幾個方面比較兩者的差異:從構架方面Tomcat主要是作為JSP/Servlet最新規範的參考實現而設計,屬於學院派,但是顯得龐大而雜亂。最常見的Tomcat使用方式是將其作為一個伺服器軟體安裝到作業系統上,然後在裡面部署web應用,如果嵌入到其他JEE伺服器中以提供Web容器功能或者作為組件嵌入到其他應用中,操作起來比較麻煩。Jetty是由多個可以獨立啟動並執行構件通過彼此之間可插拔的介面組裝在一起,其使用可以非常靈活。目前,Jetty在Geronimo、JBoss、Sybase EAServer、JOnAS和Glassfish等JEE應用伺服器中提供Web容器功能。從效能方面Tomcat在耗時請求串連數量不多時,也就是大多數請求能非常短的時間處理完畢的情況下,具有較好的執行效率。Jetty 在存在大量並發串連,大多數串連又需要更多的處理時間(商務邏輯計算佔用的時間)的情況下(這種情況是目前大多數web應用具有的特點),具有更好的效能 和伸縮性。Jetty的這個優勢得益於Continuation機制,這樣可以把有限的記憶體資源更多的留給應用程式使用。在靜態檔案服務方面,Jetty 也具有更好的效能。這是由於Jetty使用了檔案記憶體映射機制和NIO來對靜態內容進行輸入輸出,這種方式將佔用更少的系統記憶體和更快發送速度。從標準規範方面Tomcat曾是sevlet2.4規範的參考實現,從Servlet2.5之後,Tomcat不再是參考實現了,Sun公司自己建立了Glassfish,並作為Servlet2.5、Servlet3.0、Jsp2.1的參考實現。
Jetty在執行規範方面做的非常好,是Servlet2.5規範的一個優秀實現。在Servlet3.0中,Jetty自有的continuation機制也成為規範備選方案之一。
完!