欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Jetty 服務(wù)器架構(gòu)分析(上)

系統(tǒng) 2035 0

jetty7 作為分析目標(biāo), Jetty 是由一個或多個 connector 核心組件以及一些列 handler 組件和一個線程池組成,看一下結(jié)構(gòu)圖:

Jetty 服務(wù)器架構(gòu)分析(上)

C onnector 負(fù)責(zé)監(jiān)聽接收客戶連接請求,而 handler 組件則負(fù)責(zé)處理請求并給予響應(yīng),前面兩個組件工作所需要的線程資源都直接從線程池 ThreadPool 中獲取。 Jetty Server 可以有多個 connector 在不同的端口上監(jiān)聽客戶請求,而每個 connector 根據(jù)具體的使用場景不同可以有不同的實(shí)現(xiàn),例如采用非阻塞 NioConnector 、阻塞 SocketConnector 等等,而對于請求處理的 handler 組件,也根據(jù)具體需要可以使用不同的 handler ,此種設(shè)計提高了 jetty 的靈活性,需要 servlet ,則可以使用 servletHandler ,需要 session ,則再增加一個 sessionHandler ,也就是說我們完全可以不使用 servlet 或者 session ,只要不配置這個 handler 就行了。

要啟動和協(xié)調(diào)上訴核心組件工作, Jetty 提供了一個 Server 類來做這個事情 , 也就是說 Server 是應(yīng)用的起始點(diǎn),他負(fù)責(zé)創(chuàng)建并初始化 connector handler ThreadPool 組件,然后調(diào)用 start 方法啟動他們,讓所有組件都處于待命狀態(tài),因此 Server 類是一個比較重要的 Fa?ade, 值得注意的 Server 類本身也是一個 handler.

一、 組件生命周期

jetty 來說,每個組件都有其生命周期, jetty 采用了統(tǒng)一的 LifeCyle 接口來控制,我們來看下,類圖結(jié)構(gòu):

Jetty 服務(wù)器架構(gòu)分析(上)

c onnector,handler 等組件全部都直接或間接實(shí)現(xiàn)了 LifeCyle 接口,剛才說了 Server 也是 Handler ,同時他也是啟動或協(xié)調(diào)組件工作的類,也就是說 Server 可以通過 LifeCyle 接口控制其他組件的生命周期,通過 start 方法可以啟動 server, 通過 stop 則關(guān)閉了 server

二、 Connector 組件

Jetty 服務(wù)器架構(gòu)分析(上)

Connnetor 在實(shí)現(xiàn)上有 NIO BIO 兩種實(shí)現(xiàn)方式,并且支持 AJP 協(xié)議、和 SSL

三、 Handler 組件

Jetty 服務(wù)器架構(gòu)分析(上)

所有的 handler 組件都實(shí)現(xiàn)了 Handler 接口,可以看到, Handler 是可以以鏈表的形式相互組合的, Server 作為服務(wù)入口,本身也是 handler ,他繼承了 HandlerWrapper 接口,我們看以看到他帶了一個 handler 的引用變量,我們可以注入 ServletHandler 支持 servlet, 注入 WebAppContext 則支持我們的 webapp 應(yīng)用。

四、 啟動過程

先看下 jetty 的目錄結(jié)構(gòu)

Jetty 服務(wù)器架構(gòu)分析(上)

看幾個主要目錄的含義,

Bin 目錄定義了啟動 jetty 需要的 sh 文件,主要用在 linux 中, windows 中可以直接 java start.jar 啟動服務(wù)器,

Contexts 目錄主要放置跟應(yīng)用相關(guān)的 context 配置文件,跟應(yīng)用相關(guān)

etc 目錄放置跟服務(wù)器相關(guān)的配置文件,其中會定義 contexts 目錄所在的位置

lib 是服務(wù)器所需要的 jar

webapps 是放置應(yīng)用程序的位置,當(dāng)然也可以通過在 contexts 中或者 etc 中自定義

我們從外部啟動一個 jetty 服務(wù)器的過程:

Jetty 服務(wù)器架構(gòu)分析(上)

首先從 Start.jar 開始,這個 jar 定義了解析命令行的 Main 這個類, Main 主要負(fù)責(zé)解析 start.ini 配置文件 ,start.ini 中定義了 JVM 需要的參數(shù)以及 etc 目錄中用到的 xml 配置文件,如下圖:

Jetty 服務(wù)器架構(gòu)分析(上)

然后由 Config 類解析出 stat.ini OPTIONS 選項(xiàng)指定的模塊的包的位置用來加入到 classpath 中,這些模塊的包都定義在 start.config 文件中 ( 該文件可以在 start.jar 包中找到 ) ,截取一個片段給大家看下:

Jetty 服務(wù)器架構(gòu)分析(上)

這個文件的配置是需要有一定的語法在里面的,有興趣的可以研究一下,也就是說,通過在 start.ini 中定義 OPTIONS 以及在 start.config 中定義模塊路徑就可以確定把哪些 jar 加入到環(huán)境變量中。

以上準(zhǔn)備工作做完之后,就可以真正開始服務(wù)器的處理了,這時你有兩種選擇,第一種是在本進(jìn)程中通過反射方式啟動,但是缺點(diǎn)是 start.ini 中配置的 JVM 參數(shù)就形同虛設(shè)了,因?yàn)? java 進(jìn)程已經(jīng)起來了,不能再按照新的堆參數(shù)等重新設(shè)置了;第二種方式就是重新啟動一個進(jìn)程,就可以重新設(shè)置參數(shù),前面說了, start.ini 中得到了啟動參數(shù), start.config 中有了 MainClass Classpath 需要的 jar 包,則可以直接用 java xxx 方式啟動了,要使用這種方式啟動,只需要在 start.ini 中配置 –exec 參數(shù)即可。

MainClass 默認(rèn)是 XmlConfigration 類,當(dāng)然自定義的話,可以在 start.config 中去更改, XmlConfigration 做幾件事情: 1 、根據(jù) start.ini 中的定義的配置文件進(jìn)行解析 , 例如 etc/jetty.xml 2 、通過自己的 IOC 將這些服務(wù)組件組裝在一起 3 、最后調(diào)用 start 方法啟動這些組件。

==========================

未完待續(xù).....

Jetty 服務(wù)器架構(gòu)分析(上)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日日操视频 | 成人黄色免费视频 | 欧美一性一看一免费视频 | 免费播放欧美一级特黄 | 密室逃脱第一季免费观看完整在线 | jjizz老女人多水喷水 | 91精品国产综合久久久久蜜臀 | 日韩在线你懂的 | 国产成人一区二区精品非洲 | 色偷偷成人网免费视频男人的天堂 | 一本色道久久综合 | 99热久久国产综合精品久久国产 | 激情成人综合网 | 日韩一区二区三区在线看 | 亚洲日韩欧美综合 | 首页亚洲国产丝袜长腿综合 | 欧日韩不卡在线视频 | 九一国产在线观看 | 欧美日韩国产在线 | 天天操天天干天天爽 | 国产在线一区二区 | 精品国产福利片在线观看 | 欧美一区二区三区四区五区 | 美日韩一区二区三区 | 国产一区二区三区免费播放 | 免费观看成年的网站 | 人人澡人人澡 | 成人精品久久 | 国产xxxx搡xxxxx搡麻豆 | 香蕉久 | 51国产午夜精品免费视频 | 日韩在线观看中文字幕 | 人人草视频在线 | 九九在线精品视频 | 国产欧美久久一区二区三区 | 国产乱人乱精一区二区视频密 | 青青草国产成人久久91网 | 国产成人精品福利站 | 日本无码成人片在线观看波多 | 欧美乱操 | 成人毛片视频在线播放 |