<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Change Dir

    先知cd——熱愛生活是一切藝術的開始

    統計

    留言簿(18)

    積分與排名

    “牛”們的博客

    各個公司技術

    我的鏈接

    淘寶技術

    閱讀排行榜

    評論排行榜

    tomcat流程總結

    首先聲明,這個可能已經算是老掉牙的東西了~~~Long Long ago

    斷斷續續兩周時間來看了看tomcat4的源碼。雖然有點古舊,但是配合著《How tomcat works》一書看看源碼,還是很愜意的事情。中途數次想拿起紙筆抑或打開word書寫下筆記,但是書中簡潔的文風讓我覺得沒有什么可以記下的。直到最后讀完這書,過完源碼。才覺得應該記下一些要點來。簡單稱之為總結吧。

    clip_image002

    其實搞懂tomcat或者是類似的servlet的工作原理,只要配合理解這張圖就可以了。這就是tomcat的整個工作流程。

    一個HTTP請求到來,其實本質上只是一個輸入流,在這個流中蘊含了那些字節代表了這個請求的語義。而圖中的1.message就抽象了這個流,把它表示為一條信息。在到達容器的第一時刻,容器是交給connector來處理的。首先這里得考慮一個容器的啟動過程,啟動時做的一個重要事情就是初始化connector,而connector初始化時干什么呢?顯然,創建socket。一切初始化好了,才有第一步消息到來這件事情咯。

    信息到了,connector干的事情就是如圖中的2和3步——創建http請求對象和響應對象。當然這個行為也不是connector自己干的,它只是雇傭了一個叫做HttpProcessor的兄弟來干活。真正的creation都是這個兄弟干的。HttpProcessor里面設計了一些簡單的并發多線程trick,基本上就是讓socket等待著請求信息的到來,來一個,就處理一個。HttpProcessor的一句話總結就是利用多線程技術parse整個請求的stream。幾個parse步驟分別是:解析connection;解析request;解析headers。補充一句,request和response對象都是在HttpProcessor初始化的時候初始化的,但是它們內容的填充是在parse的時候完成的。

    接著,connector的任務就結束了。然后一個invoke其實就是工作的交接,該context重磅登場了。Context以其名字就決定了其霸氣的側漏無疑,基本上所有的東西都包含在內。我們把3的invoke當做一些context的自我設置(初始化),那么4的invoke就是context的表演開始了。首先在圖里沒有給出的是loader和logger的處理,context會在這兩個依賴對象不為空的情況下運行它們。Loader是設置java class loader的,tomcat自己定義了一個classloader來加載特定的類。而logger無非就是把日志給啟動起來。當然在啟動pipeline之前做了啟動subcontainer的操作。這是可以理解的,用計算機本質的遞歸來理解,有點像是先序遍歷樹的感覺。而pipeline被啟動后,后續還有一個manager的啟動,這個manager是主要用來管理session的。而所有這些都是可以配置的。

    照著上圖主要說說pipeline,pipeline就是流水線了,上面有很多的閥門valve,閥門可以自己加,pipeline的的工作就是步驟5,順序invoke每個閥門。其實也不是pipeline啟動,pipeline其實只是啟動了內置的pipelineContext對象,而這個對象會不斷的調用invokenext()方法來實現流水線的執行。而這些個valve會調用wrapper,他們的invoke方法會啟動wrapper,在檢測完mapping后,wrapper會allocate一個servlet實例,接著servlet啟動、干活、開始自己的生命周期……這個世界就開始活躍了。

    That is it

    最后奉上一張稍微詳細點的圖幫助理解。

    clip_image004

    當然,美妙的設計這里沒有講,不是因為時間不夠或者是空間不足,而是我自己還沒有完全的消化,tomcat我認為從設計上講,結構是beautiful的。光是lifecycle的設計以及各個類模塊區分(connector,loader,context,wrapper以及manager等等)之間的初始化調用等細節每個拿出來都夠寫本書了。So~~~read the fucking source code by yourself。

    參考資料:

    《How tomcat works》

    Tomcat 系統架構與設計模式,第 1 部分: 工作原理http://www.ibm.com/developerworks/cn/java/j-lo-tomcat1/

    posted on 2011-09-27 14:54 changedi 閱讀(2363) 評論(2)  編輯  收藏 所屬分類: Java技術

    評論

    # re: tomcat流程總結 2011-09-28 10:06 @joe

    恩,總結的不錯。  回復  更多評論   

    # re: tomcat流程總結[未登錄] 2011-09-28 12:31 beansoft

    Good article!  回復  更多評論   

    主站蜘蛛池模板: 在线看片v免费观看视频777| 免费视频成人手机在线观看网址| 国产成在线观看免费视频| 亚洲国产成人久久综合一| 少妇性饥渴无码A区免费| 亚洲一区二区三区在线观看精品中文| 人人爽人人爽人人片A免费 | 国产精品黄页免费高清在线观看| 吃奶摸下高潮60分钟免费视频| 亚洲av成本人无码网站| mm1313亚洲精品无码又大又粗 | 亚洲成AV人片在线观看无码 | 免费一级黄色毛片| 一区二区三区免费视频播放器| 亚洲国产综合精品中文字幕| 中文字幕免费在线观看动作大片 | 四虎亚洲国产成人久久精品| 黄页网址大全免费观看12网站| 亚洲精品第一国产综合精品99 | 无码毛片一区二区三区视频免费播放 | 97人伦色伦成人免费视频| 亚洲人成网站在线播放2019| 国产在线19禁免费观看| 一区二区视频免费观看| 国产国拍亚洲精品mv在线观看| 18女人腿打开无遮掩免费| 亚洲码和欧洲码一码二码三码| gogo全球高清大胆亚洲| 精品一卡2卡三卡4卡免费视频| 亚洲制服丝袜一区二区三区| 免费看少妇高潮成人片| 亚洲精品视频观看| 国产人成免费视频| 国产在线精品免费aaa片| 亚洲天堂一区二区三区| 又粗又黄又猛又爽大片免费| 免费视频精品一区二区三区| 亚洲码和欧洲码一码二码三码| 亚洲一区二区三区偷拍女厕| 欧美好看的免费电影在线观看| 一级成人a做片免费|