1、啥是jetty

Jetty是一個開源的HTTP伺服器和Servlet引擎,它可以為JSP和Servlet提供運行時環境。相對於Tomcat,jetty更加輕量、更加簡易、更加靈活。

2、jetty特點

(1)jetty是非同步的,支持更高的並發量

(2)jetty更靈活,更加輕量,更容易定製,更高的資源利用率

(3)Jetty 默認採用的 NIO 模型,jetty能很好支持長鏈接

(4)集成簡單,應用只要集成jetty,應用就可以快速支持 http 服務

3、jetty與tomcat區別

(1)Jetty 比 Tomcat 架構更加簡單。 jetty的所有組件都是基於 Handler 來實現,它的主要功能擴展都可以用 Handler 來實現;Tomcat 的整體設計上很複雜,tomcat是基於容器的架構,開發者要想擴展tomcat功能就需要了解tomcat架構,遵循tomcat的規範。

(2)jetty比較容易擴展第三方框架,所以也跟容易定製

(3)jetty更加輕量可以節省內存

(4)tomcat更加穩定、更加成熟,在企業級中佔有率很大

4、jetty應用場景

無疑在企業開發中,tomcat是絕對佔有量的服務引擎,但是也不是說jetty就無所用處,因為jetty默認使用NIO,所以在輕量級的、保持長連接的場景還是很有用處的,比如默寫購物的客服聊天。

5、jetty原理

Jetty 的核心組件由 Server 和 Connector 兩個組件構成。

Server 是基於 Handler 容器工作的,它類似與 Tomcat 的 Container 容器

Connector負責接受客戶端的連接請求,並將請求分配給一個處理隊列去執行

Jetty 是圍繞著 Server 類來構建,Server 類繼承了 Handler,關聯了 Connector 和 Container。Container 是管理 Mbean 的容器。

Jetty 的 Server 的擴展主要是實現一個個 Handler 並將 Handler 加到 Server 中,Server 中提供了調用這些 Handler 的訪問規則。

Jetty 提供了兩種 Handler 類型,

1 ) HandlerWrapper

(1)、可以將一個 Handler 委託給另外一個類去執行,將handler載入到jetty中就是通過將handler委託給server去執行的。

(2)、可以配合 ScopeHandler 去攔截 Handler 的執行,在調用 Handler 之前或之後可以插入做一些其他任務。

2)HandlerCollection 可以將多個 Handler 組裝成 Handler 鏈,就可以方便做擴展。

6、jetty啟動過程

jetty的啟動邏輯非常簡單,Jetty 的入口是 Server 類,Server 類啟動完成了,就代表 Jetty 能為你提供服務了。

Server 首先啟動設置到自身的Handler,然後啟動此handler鏈上的其它handler,最後啟動JMX 的 Mbean,最後會啟動 Connector,打開請求埠,接受客戶端請求。

7、jetty接收請求的步驟

jetty默認是基於http協議的

(1)Jetty 在啟動時將會創建 BIO 的工作環境,它會創建 HttpConnection 類用來解析和封裝 HTTP1.1 的協議

(2)創建一個隊列線程池,用於處理每個建立連接產生的任務

(3)創建 ServerSocket,用於準備接受客戶端的 socket 請求

(3)創建一個或多個監聽線程,用來監聽訪問埠是否有連接進來

(4)當 ServerSocket 被執行時,HttpConnection 將被調用,它固定了如何將請求傳遞到 servlet 容器裏,又如何將請求最終路由到目的 servlet

(5)當 Jetty 接受到一個請求時,Jetty 就把這個請求交給在 Server 中註冊的 Handler 去執行

(6)Server 的 handle 的方法將請求代理給 ContextHandler 的 handle 方法,ContextHandler 又調用 HelloHandler 的 handle 方法

關注我的csdn

關注我的訂閱號


推薦閱讀:
相關文章