技術(shù)管理篇5一技術(shù)演變史(8)

上一篇我們聊了Web服務(wù)器到應(yīng)用服務(wù)器的發(fā)展歷程瓦侮,今天以JavaEE的發(fā)展歷程為代表,聊一下應(yīng)用服務(wù)器的演變变隔。

假設(shè)我們從頭搭建一個Java的應(yīng)用服務(wù)器喘落。首先茵宪,我們得先實現(xiàn)網(wǎng)絡(luò)接入部分,我們管這一層叫網(wǎng)絡(luò)層瘦棋。JDK封裝了幾個操作系統(tǒng)的網(wǎng)絡(luò)模型稀火,可以幫助到我們。尤其是NIO包赌朋,提供了高性能的網(wǎng)絡(luò)支持凰狞。

通過網(wǎng)絡(luò)層,我們接收的數(shù)據(jù)還是字節(jié)序列沛慢。我們還需要根據(jù)支持的網(wǎng)絡(luò)協(xié)議赡若,把字節(jié)數(shù)據(jù)翻譯成應(yīng)用能理解的數(shù)據(jù)。比如Http協(xié)議团甲,我們要解析出哪些是Header數(shù)據(jù)逾冬,哪些是參數(shù)數(shù)據(jù),哪些是上傳的文件等等伐庭。我們管這一層叫協(xié)議層粉渠。

網(wǎng)絡(luò)層和協(xié)議層相互獨立,這樣我們就可以靈活的在兩個方面進行擴展圾另,比如支持Http2等其他協(xié)議霸株,再比如網(wǎng)絡(luò)層也可以支持更高效的網(wǎng)絡(luò)模型。

經(jīng)過協(xié)議層之后集乔,我們就得到了應(yīng)用可理解的協(xié)議對象信息去件。我們可以理解為Request對象。下一步就是傳遞給業(yè)務(wù)處理層扰路。作為一個服務(wù)器尤溜,我們應(yīng)該把請求傳遞給誰呢。

服務(wù)器應(yīng)該是可以同時運行多個應(yīng)用程序的汗唱,每個應(yīng)用程序可以對應(yīng)不同的域名宫莱。我們怎么來區(qū)分呢?我們得有一套接口規(guī)則來區(qū)分服務(wù)器代碼和業(yè)務(wù)代碼哩罪,這有點像CGI授霸。業(yè)務(wù)代碼怎么被服務(wù)器加載進來呢,業(yè)務(wù)代碼中哪些代碼對應(yīng)哪個請求呢际插,這都得有一個規(guī)范來描述碘耳。我們管這一層叫業(yè)務(wù)代碼層,在JavaEE中就是War包的規(guī)范框弛。

War包就是一個zip壓縮包辛辨,他通過一系列約定,定義了一個可被加載的業(yè)務(wù)代碼包瑟枫。比如web.xml文件放在哪個目錄下斗搞,class文件放在哪,jar包放在哪等等慷妙。

通過這個規(guī)范榜旦,服務(wù)器就能知道你這個業(yè)務(wù)代碼怎么加載。不同的代碼包之間是需要隔離的景殷,這個怎么來做呢溅呢。我們得讓不同的War文件可以加載到不同的命名空間下,這樣才能做到互相之間的隔離猿挚。我們就需要為服務(wù)器設(shè)計單獨的Class Loader體系了咐旧。

首先,服務(wù)器的公用代碼是在父加載空間中的绩蜻,這樣可以保證各個業(yè)務(wù)包代碼可以復(fù)用服務(wù)器的公用代碼铣墨。然后,服務(wù)器為每個War包提供不同的加載器办绝,這樣就保證了不同War包之間的隔離伊约。

在一個War包中姚淆,代碼也會分為兩部分。一部分是我們自己寫的代碼屡律,一部分是引用的第三方的Jar包腌逢。為了避免第三方代碼覆蓋了我們自己的代碼,War加載器會先加載class目錄下我們自己的代碼超埋,然后再加載lib目錄下第三方的代碼搏讶。

解決了代碼的隔離和覆蓋問題,我們還得看一個請求到達后霍殴,怎么去路由處理媒惕。因為一個War包會對應(yīng)很多請求Path,到底哪個Path執(zhí)行哪段代碼来庭,我們得需要描述清楚妒蔚。Web.xml文件中就清晰的描述了這個對應(yīng)關(guān)系。

在Web.xml中月弛,我們把請求Path映射到不同的Servlet上面睛。當(dāng)這個Path的請求到達后,服務(wù)器通過網(wǎng)絡(luò)層和協(xié)議層尊搬,將請求的數(shù)據(jù)封裝成Request對象叁鉴。然后,通過域名和War包的對應(yīng)關(guān)系描述佛寿,找到對應(yīng)的War包幌墓,再通過War包里的Web.xml文件,找到對應(yīng)的Servlet冀泻,最終運行執(zhí)行常侣。

有時候,我們需要在某些Path請求達到后弹渔,在Servlet處理之前做一些攔截處理胳施,這就是Filter的概念。同樣在Web.xml中肢专,我們描述了各種Filter和Path的對應(yīng)關(guān)系舞肆。

總結(jié)一下,我們把應(yīng)用服務(wù)器分拆為網(wǎng)絡(luò)層博杖、協(xié)議層椿胯、業(yè)務(wù)代碼層,逐層來簡化服務(wù)器的設(shè)計剃根,讓服務(wù)器獨立出來哩盲,開發(fā)者可以自由的編寫自己的業(yè)務(wù)邏輯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市廉油,隨后出現(xiàn)的幾起案子惠险,更是在濱河造成了極大的恐慌,老刑警劉巖抒线,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件班巩,死亡現(xiàn)場離奇詭異,居然都是意外死亡十兢,警方通過查閱死者的電腦和手機趣竣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門摇庙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旱物,“玉大人,你說我怎么就攤上這事卫袒∠海” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵夕凝,是天一觀的道長宝穗。 經(jīng)常有香客問我,道長码秉,這世上最難降的妖魔是什么逮矛? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮转砖,結(jié)果婚禮上须鼎,老公的妹妹穿的比我還像新娘。我一直安慰自己府蔗,他們只是感情好晋控,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姓赤,像睡著了一般赡译。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上不铆,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天蝌焚,我揣著相機與錄音,去河邊找鬼誓斥。 笑死综看,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的岖食。 我是一名探鬼主播红碑,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了析珊?” 一聲冷哼從身側(cè)響起羡鸥,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎忠寻,沒想到半個月后惧浴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡奕剃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年衷旅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纵朋。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡柿顶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出操软,到底是詐尸還是另有隱情嘁锯,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布聂薪,位于F島的核電站家乘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏藏澳。R本人自食惡果不足惜仁锯,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翔悠。 院中可真熱鬧业崖,春花似錦、人聲如沸凉驻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涝登。三九已至雄家,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胀滚,已是汗流浹背趟济。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咽笼,地道東北人顷编。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像剑刑,于是被迫代替她去往敵國和親媳纬。 傳聞我的和親對象是個殘疾皇子双肤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,777評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)钮惠,斷路器茅糜,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,773評論 6 342
  • 散架一天,佩服自己通宵后素挽,10點幾就起來拼命到下午6點多才休息1個小時后復(fù)活到現(xiàn)在……
    DeathKnightR閱讀 75評論 0 0
  • ? fengyu學(xué)習(xí) 又是一個周末蔑赘,繼續(xù)我的Vue學(xué)習(xí)之旅 上次學(xué)習(xí)了一些 v-if 的用法,這回又輪到誰了呢预明? ...
    封小胖閱讀 4,911評論 3 12