Jetty源碼學習2-應用服務器架構

引言 java

該文主要參考了玄霄的分享,感受他分享的比較細。 web

應用服務器目錄結構 服務器


因爲須要用到jetty的websocket開發,所以選用的版本是8.1.7,從上圖能夠看到,主要有下面幾個主要目錄: websocket

一、bin目錄 架構

啓動腳本的目錄,也包括了start.jar,主要是用來起引導做用的,引導資源加載和服務的啓動。 app

二、etc目錄 eclipse

配置文件的目錄,也包括了start.ini,這份配置文件是用來指導start.jar的加載順序和加載模塊的,這個後面會有詳解。 webapp

三、lib目錄 socket

庫文件目錄,若是須要調試jetty的話,能夠下載源碼加到eclipse中,客戶端遠程調試便可,命令: java -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8090 -DEOS_DEBUG=true -jar start.jar  學習

四、webapps目錄

應用部署目錄

應用服務器啓動流程

一、【流程圖】


二、【start.jar】

能夠看到,最後將server啓動起來了,而jetty最核心的即server類,學習jetty的同窗不防直接從server類的doStart()或者handle(...)入手。

三、【server.start

這幾段代碼說明了一個服務器最重要的幾個模塊分別是:


都很抽象了有木有,那咱們來點實際的,看看jetty服務器是如何的,下面是jetty.xml的配置:


其實服務器的架構大同小異,最基本的4個組件老是不可或缺的,最後一個deployService是用來管理和部署應用的,他管理能夠部署的工程類型,並管理着每一個工程部署的生命週期。

四、【deployService】


管理了三類工程的部署,掃描工程的部署目錄,匹配部署器,並執行工程的部署,到此,大體流程應如此:

五、【HttpService】

感受該service纔是最重要的模塊,也是應用服務器設計的瓶頸所在。

顧名思義,爲每一個鏈接起個線程去處理,固然TomCat默認採用BIO,而Jetty默認是NIO,關於JETTY NIO的詳細描述見後面的文章。

WebModule

你可曾想過,要實現servlet規範,一個web應用的WebModule須要哪些東西才能正常運做,能夠服務用戶的請求。

應該須要classloader來加載應用的資源,還須要context來指導server識別本身,還須要servlet,還須要filter,還須要初始化方法和請求的hanlder方法,最後須要製造request和response的方法等,以下圖,所以產生了該web模型:

我的感受是服務器驅動了servlet規範的產生,若是你要更方便理解的話,能夠等價於webdefault.xml。

而後一個web部署器管理了一個webModule集:

接下來看看WebModule是如何處理一次請求的:



代碼片斷以下:

Jetty架構

注:默認的是NIO而不是BIO

相關文章
相關標籤/搜索