亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

TOMCAT源碼分析(啟動框架)

2019-11-18 13:07:17
字體:
來源:轉載
供稿:網友

  前言:
  本文是我閱讀了TOMCAT源碼后的一些心得。 主要是講解TOMCAT的系統框架, 以及啟動流程。若有錯漏之處,敬請批評指教!
  
  建議:
  究竟TOMCAT的框架還是比較復雜的, 單是從文字上理解, 是不那么輕易把握TOMCAT的框架的。 所以得實踐、實踐、再實踐。 建議下載一份TOMCAT的源碼, 調試通過, 然后單步跟蹤其啟動過程。 假如有不明白的地方, 再來查閱本文, 看是否能得到幫助。 我相信這樣效果以及學習速度都會好很多!
  
  1. Tomcat的整體框架結構
  Tomcat的基本框架, 分為4個層次。
  Top Level Elements:
  Server
  Service
  Connector
  HTTP
  AJP
  Container
  Engine
  Host
  Context
  Component
  manager
  logger
  loader
  pipeline
  valve
  ...
  站在框架的頂層的是Server和Service
  Server: 其實就是BackGroud程序, 在Tomcat里面的Server的用處是啟動和監聽服務端事件(諸如重啟、關閉等命令。 在tomcat的標準配置文件:server.xml里面, 我們可以看到“”這里的"SHUTDOWN"就是server在監聽服務端事件的時候所使用的命令字)
  Service: 在tomcat里面, service是指一類問題的解決方案?!⊥ǔN覀儠J使用tomcat提供的:Tomcat-Standalone 模式的service。 在這種方式下的service既給我們提供解析jsp和servlet的服務, 同時也提供給我們解析靜態文本的服務。
  
  Connector: Tomcat都是在容器里面處理問題的, 而容器又到哪里去取得輸入信息呢?
  Connector就是專干這個的。 他會把從socket傳遞過來的數據, 封裝成Request, 傳遞給容器來處理。
  通常我們會用到兩種Connector,一種叫http connectoer, 用來傳遞http需求的。 另一種叫AJP, 在我們整合apache與tomcat工作的時候, apache與tomcat之間就是通過這個協議來互動的。 (說到apache與tomcat的整合工作, 通常我們的目的是為了讓apache 獲取靜態資源, 而讓tomcat來解析動態的jsp或者servlet。)
  Container: 當http connector把需求傳遞給頂級的container: Engin的時候, 我們的視線就應該移動到Container這個層面來了。
  在Container這個層, 我們包含了3種容器: Engin, Host, Context.
  Engin: 收到service傳遞過來的需求, 處理后, 將結果返回給service( service 是通過 connector 這個媒介來和Engin互動的 ).
  Host: Engin收到service傳遞過來的需求后,不會自己處理, 而是交給合適的Host來處理。
  Host在這里就是虛擬主機的意思, 通常我們都只會使用一個主機,既“localhost”本地機來處理。
  Context: Host接到了從Host傳過來的需求后, 也不會自己處理, 而是交給合適的Context來處理。
  比如:
  
  前者交給foo這個Context來處理, 后者交給bar這個Context來處理。
  很明顯吧! context的意思其實就是一個web app的意思。
  我們通常都會在server.xml里面做這樣的配置
  
  這個context容器,就是用來干我們該干的事兒的地方的。
  
  Compenent: 接下來, 我們繼續講講component是干什么用的。
  我們得先理解一下容器和組件的關系。
  需求被傳遞到了容器里面, 在合適的時候, 會傳遞給下一個容器處理。
  而容器里面又盛裝著各種各樣的組件, 我們可以理解為提供各種各樣的增值服務。
  manager: 當一個容器里面裝了manager組件后,這個容器就支持session治理了, 事實上在tomcat里面的session治理, 就是靠的在context里面裝的manager component.
  logger: 當一個容器里面裝了logger組件后, 這個容器里所發生的事情, 就被該組件記錄下來啦! 我們通常會在logs/ 這個目錄下看見 catalina_log.time.txt 以及 localhost.time.txt 和localhost_examples_log.time.txt。 這就是因為我們分別為:engin, host以及context(examples)這三個容器安裝了logger組件, 這也是默認安裝, 又叫做標配 :)
  loader: loader這個組件通常只會給我們的context容器使用, loader是用來啟動context以及治理這個context的classloader用的。
  pipline: pipeline是這樣一個東西, 當一個容器決定了要把從上級傳遞過來的需求交給子容器的時候, 他就把這個需求放進容器的管道(pipeline)里面去。 而需求傻呼呼得在管道里面流動的時候, 就會被管道里面的各個閥門攔截下來。 比如管道里面放了兩個閥門。 第一個閥門叫做“access_allow_vavle”, 也就是說需求流過來的時候,它會看這個需求是哪個IP過來的, 假如這個IP已經在黑名單里面了, sure, 殺! 第二個閥門叫做“defaul_access_valve”它會做例行的檢查, 假如通過的話,OK, 把需求傳遞給當前容器的子容器。 就是通過這種方式, 需求就在各個容器里面傳遞,流動, 最后抵達目的地的了。
  valve: 就是上面所說的閥門啦。
  Tomcat里面大概就是這么些東西, 我們可以簡單地這么理解tomcat的框架,它是一種自上而下, 容器里又包含子容器的這樣一種結構。
  2. Tomcat的啟動流程
  這篇文章是講tomcat怎么啟動的,既然我們大體上了解了TOMCAT的框架結構了, 那么我們可以望文生意地就猜到tomcat的啟動, 會先啟動父容器,然后逐個啟動里面的子容器。 啟動每一個容器的時候, 都會啟動安插在他身上的組件。 當所有的組件啟動完畢, 所有的容器啟動完畢的時候, tomcat本身也就啟動完畢了。
  順理成章地, 我們同樣可以猜到, tomcat的啟動會分成兩大部分, 第一步是裝配工作。 第二步是啟動工作。
  裝配工作就是為父容器裝上子容器, 為各個容器安插進組件的工作。 這個地方我們會用到digester模式, 至于digester模式什么, 有什么用, 怎么工作的. 請參考
  啟動工作是在裝配工作之后, 一旦裝配成功了, 我們就只需要點燃最上面的一根導線, 整個tomcat就會被激活起來。 這就好比我們要開一輛已經裝配好了的汽車的時候一樣,我們只要把鑰匙插進鑰匙孔,一擰,汽車的引擎就會發動起來,空調就會開起來, 安全裝置就會生效, 如此一來,汽車整個就發動起來了。(這個過程確實和TOMCAT的啟動過程不謀而和, 讓我們不得不懷疑 TOMCAT的設計者是在GE做java開發的)。
  2.1 一些有意思的名稱:
  Catalina
  Tomcat
  Bootstrap
  Engin
  Host
  Context
  他們的意思很有意思:
  Catalina: 遠程轟炸機
  Tomcat: 熊貓轟炸機 -- 轟炸機的一種(這讓我想起了讓國人引以為豪的熊貓手機,是不是英文可以叫做tomcat??? , 又讓我想起了另一則廣告: 波導-手機中的戰斗機、波音-客機中的戰斗機 )
  Bootstap: 引導
  Engin: 發動機
  Host: 主機,領土
  Context: 內容, 目標, 上下文
  
  ... 在許多許多年后, 現代人類已經滅絕。 后現代生物發現了這些單詞零落零落在一塊。 一個自以為聰明的家伙把這些東西翻譯出來了:
  在地勤人員的引導(bootstrap)下, 一架轟炸架(catalina)騰空躍起, 遠看是熊貓轟炸機(tomcat), 近看還是熊貓轟炸機! 憑借著優秀的發動機技術(engin), 這架熊貓轟炸機飛臨了敵國的領土上空(host), 對準目標(context)投下了毀天滅地的核彈頭,波~ 現代生物就這么隔屁了~
  
  綜上所述, 這又不得不讓人聯想到GE是不是也參與了軍事設備的生產呢?
  反對美帝國主義! 反對美霸權主義! 和平萬歲! 自由萬歲!
  
  2.2 歷史就是那么驚人的相似! tomcat的啟動就是從org.apache.catalina.startup.Bootstrap這個類悍然啟動的!
  在Bootstrap里做了兩件事:
  1. 指定了3種類型classloader:
  commonLoader: common/classes、common/lib、common/endorsed
  catalinaLoader: server/classes、server/lib、commonLoader
  sharedLoader: shared/classes、shared/lib、commonLoader
  2. 引導Catalina的啟動。
  用Reflection技術調用org.apache.catalina.startup.Catalina的PRocess方法, 并傳遞參數過去。
  
  2.3 Catalina.java
  Catalina完成了幾個重要的任務:
  1. 使用Digester技術裝配tomcat各個容器與組件。
  1.1 裝配工作的主要內容是安裝各個大件。 比如server下有什么樣的servcie。 Host會容納多少個context。 Context都會使用到哪些組件等等。
  1.2 同時呢, 在裝配工作這一步, 還完成了mbeans的配置工作。 在這里,我簡單地但不十分精確地描述一下mbean是什么,干什么用的。
  我們自己生成的對象, 自己治理, 天經地義! 但是假如我們創建了對象了, 想讓別人來管, 怎么辦呢? 我想至少得告訴別人我們都有什么, 以及通過什么方法可以找到 吧! JMX技術給我們提供了一種手段。 JMX里面主要有3種東西。Mbean, agent, connector.
  Mbean: 用來映射我們的對象。也許mbean就是我們創建的對象, 也許不是, 但有了它, 就可以引用到我們的對象了。
  Agent: 通過它, 就可以找到mbean了。
  Connector: 連接Agent的方式。 可以是http的, 也可以是rmi的,還可以直接通過socket。
  發生在tomcat 裝配過程中的事情: GlobalResourcesLifecycleListener 類的初始化會被觸發:
  protected static Registry registry = MBeanUtils.createRegistry(); 會運行

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
8050国产精品久久久久久| 亚洲成**性毛茸茸| 亚洲一区二区在线播放| 国产精品视频成人| 日本19禁啪啪免费观看www| 日韩在线观看免费全集电视剧网站| 欧美性猛交xxxx乱大交蜜桃| 日韩av在线最新| 久久男人av资源网站| 国产精品热视频| 激情成人在线视频| 国产亚洲人成a一在线v站| 欧美性猛交xxxx免费看| 国产精品免费一区二区三区都可以| 日韩福利在线播放| 91美女片黄在线观看游戏| 亚洲美女又黄又爽在线观看| 色噜噜狠狠狠综合曰曰曰88av| 91国产视频在线播放| 国产欧美精品在线播放| 91av视频在线播放| 午夜剧场成人观在线视频免费观看| 国产精品欧美一区二区三区奶水| 欧美激情在线视频二区| 日韩欧美在线网址| 久久乐国产精品| 亚洲一区二区久久久久久| 久久99热精品这里久久精品| 日韩欧美国产免费播放| 国产欧美一区二区白浆黑人| 日韩欧美高清在线视频| 性日韩欧美在线视频| 一本色道久久88综合日韩精品| 2018日韩中文字幕| 亚洲最大在线视频| 91久久精品国产91性色| 在线不卡国产精品| 日韩精品一二三四区| 成人黄色免费看| 久久影视电视剧免费网站清宫辞电视| 日韩精品免费在线播放| 欧美精品一区二区三区国产精品| 欧美激情久久久久| 国产suv精品一区二区| 少妇高潮久久77777| 在线观看国产精品淫| 97成人精品区在线播放| 国产精品成人观看视频国产奇米| 国产免费观看久久黄| 亚洲国产精品美女| 久久韩国免费视频| 成人激情视频在线观看| 国产精品国产福利国产秒拍| 精品国产自在精品国产浪潮| 性欧美xxxx视频在线观看| 精品亚洲精品福利线在观看| 国产精品中文字幕在线| 欧美激情免费在线| 欧美电影免费看| 成人激情视频小说免费下载| 美女视频黄免费的亚洲男人天堂| 亚洲品质视频自拍网| 亚洲欧美日韩成人| 2019中文在线观看| 欧美专区福利在线| 日韩精品高清在线| 色狠狠av一区二区三区香蕉蜜桃| 高清欧美性猛交xxxx| www.xxxx欧美| 久久久日本电影| 日韩一区二区三区国产| 国产成人精品一区二区三区| 欧美午夜xxx| 在线观看91久久久久久| 国产亚洲一级高清| 日韩欧美成人网| 清纯唯美亚洲综合| 国产亚洲精品成人av久久ww| 亚洲精品电影网在线观看| 欧美成aaa人片在线观看蜜臀| 精品国产欧美成人夜夜嗨| 亚洲国产精品悠悠久久琪琪| 久久躁狠狠躁夜夜爽| 久久影院免费观看| 日韩精品免费在线| 黄网站色欧美视频| 亚洲国内精品在线| 国产亚洲精品91在线| 久久久久999| 亚洲综合第一页| 国产精品美女久久久免费| 午夜伦理精品一区| 精品亚洲精品福利线在观看| 欧美激情a∨在线视频播放| 午夜精品久久久久久久久久久久久| 久久色在线播放| 中文字幕日本欧美| 国内免费久久久久久久久久久| 亚洲精品国产拍免费91在线| 亚洲电影成人av99爱色| 亚洲理论片在线观看| 久久久久久久久久亚洲| 日韩免费高清在线观看| 欧美一级视频一区二区| 日本高清视频精品| 91九色在线视频| 91在线免费视频| 亚洲成人精品视频在线观看| 国产日韩欧美在线看| 8090成年在线看片午夜| 色樱桃影院亚洲精品影院| 欧美成人激情视频免费观看| 日韩中文字幕在线播放| 亚洲欧美国产精品久久久久久久| 国产精品无码专区在线观看| 国产精品久久久久久久天堂| 97香蕉超级碰碰久久免费软件| 在线观看精品自拍私拍| 久久91精品国产| 欧美另类在线播放| 亚洲成人中文字幕| 久久中文字幕国产| 精品久久久久久国产91| 亚洲人成电影在线播放| 欧美日韩国产影院| 国产精品免费小视频| 夜夜嗨av色一区二区不卡| 国产精品国产三级国产aⅴ9色| 在线观看亚洲视频| 最近2019好看的中文字幕免费| 亚洲黄色在线看| 欧美一级片在线播放| 性色av一区二区三区| 日韩在线观看免费全集电视剧网站| 欧美日韩免费区域视频在线观看| 久久躁日日躁aaaaxxxx| 欧美高清在线播放| 日本久久精品视频| 午夜精品蜜臀一区二区三区免费| 亚洲va电影大全| 日本成熟性欧美| 九九九热精品免费视频观看网站| 欧美性理论片在线观看片免费| 亚洲午夜国产成人av电影男同| 国产精品jvid在线观看蜜臀| 欧美尺度大的性做爰视频| 性欧美激情精品| 中文国产成人精品久久一| 精品国产一区二区三区久久久| 国产xxx69麻豆国语对白| 欧洲s码亚洲m码精品一区| 国产日韩在线亚洲字幕中文| 九九热这里只有精品免费看| 日韩av在线免费观看一区| 欧美日韩第一页| 欧美丰满少妇xxxxx| 久久免费精品日本久久中文字幕| 国产成人在线精品| www.日韩系列| 国产亚洲精品美女久久久久| 国产精品综合不卡av| 欧美第一淫aaasss性| 精品人伦一区二区三区蜜桃免费| 久久久久五月天|