6 周搭建一個(gè)實(shí)用的 Tomcat 框架
郭屹,中國(guó) Java 研發(fā)工程師鼻祖之一,曾在 Sun Microsystems 公司 Java 研發(fā)中心擔(dān)任 J2EE 研發(fā)工程師,同時(shí)他也是 JDBC Driver、Minis 開(kāi)發(fā)者,Norming 軟件國(guó)際 CTO。
在長(zhǎng)達(dá) 30 余年的編程生涯中,他經(jīng)歷了 Java 技術(shù)的飛速發(fā)展,積累了豐富的行業(yè)經(jīng)驗(yàn)和技術(shù)實(shí)踐,有 MiniSpring、MiniTomcat、MiniRedis、MiniLanguage 等幾款開(kāi)源作品。除此之外,他還十分樂(lè)于分享自己的知識(shí)和經(jīng)驗(yàn),是《手把手帶你寫一個(gè) MiniSpring》專欄以及技術(shù)類書籍《認(rèn)識(shí)編程》和《Java 編程十五講》的作者,一直以來(lái)他都在通過(guò)寫作、講演等方式推動(dòng)著編程社區(qū)的發(fā)展。
課程介紹
眾所周知,Tomcat 是應(yīng)用最廣泛的 Web 應(yīng)用服務(wù)器,不過(guò)在實(shí)際使用 Tomcat 過(guò)程中,我們總是會(huì)遇到各種復(fù)雜問(wèn)題,比如:
- 如何管理多個(gè) Servlet?
- 如何支持多個(gè)獨(dú)立的應(yīng)用?
- 大量用戶請(qǐng)求的性能問(wèn)題如何解決?
- 處理高并發(fā)請(qǐng)求時(shí)的內(nèi)存泄漏問(wèn)題怎么處理?
- ……
這些復(fù)雜的問(wèn)題出現(xiàn)時(shí),如果僅僅是會(huì)使用 Tomcat 是萬(wàn)萬(wàn)不能解決的,我們需要深入 Tomcat 原理,從底層的視角審視問(wèn)題,并徹底解決問(wèn)題。而掌握一項(xiàng)技術(shù)最好也是最扎實(shí)的方式就是重造輪子。
為此我們邀請(qǐng)了前 Sun Microsystems Java 研發(fā)工程師郭屹老師,他會(huì)帶你一步步剖析源碼,深入 Tomcat 底層原理,并讓你從中領(lǐng)悟 Tomcat 的設(shè)計(jì)哲學(xué),幫助你在面對(duì)復(fù)雜的生產(chǎn)問(wèn)題時(shí)快速找到解決方案,同時(shí)也為你自己設(shè)計(jì)系統(tǒng)提供思路與最佳實(shí)踐。
課程設(shè)計(jì)
MiniTomcat 的課程大體上分成四大塊:HTTP Server、Connector、Container 和擴(kuò)展部分。熟悉 Tomcat 的人想必更加清楚,Connector + Container 就是 Tomcat 的核心了。學(xué)習(xí)這些內(nèi)容,會(huì)為進(jìn)一步的研究打下良好的基礎(chǔ)。
第一章 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 Web 應(yīng)用服務(wù)器
Web 應(yīng)用的核心是對(duì) HTTP 協(xié)議的支持,接收瀏覽器發(fā)送的 HTTP 請(qǐng)求,解析 URL,找到資源返回內(nèi)容,顯示在客戶瀏覽器上。這一部分先不引進(jìn)任何規(guī)范,而是自己簡(jiǎn)單地實(shí)現(xiàn) Request 請(qǐng)求與 Response 響應(yīng)。雖然它很簡(jiǎn)單,但是也是一個(gè)地道的 Web 應(yīng)用服務(wù)器,不僅支持靜態(tài)資源,還能運(yùn)行程序動(dòng)態(tài)返回內(nèi)容。我們后面的改造都會(huì)基于這個(gè)簡(jiǎn)單服務(wù)器。
第二章 實(shí)現(xiàn)專業(yè)的 Connector
基于簡(jiǎn)單的應(yīng)用服務(wù)器,這部分我們會(huì)來(lái)重點(diǎn)實(shí)現(xiàn) MiniTomcat 連接層,并且按照 Servlet 規(guī)范進(jìn)行改造。優(yōu)化代碼結(jié)構(gòu),將第一部分的 Server 拆分為 Connector 與 Processor。之后初步優(yōu)化性能,引入 Processor 池化技術(shù),支持 Processor 并發(fā)執(zhí)行,提高 Server 的高并發(fā)能力。然后,我們就要按照規(guī)范行事,實(shí)現(xiàn) Servlet 對(duì)請(qǐng)求和響應(yīng)的接口規(guī)范。
這一部分的改造過(guò)后,MiniTomcat 的連接層就有模有樣了。
第三章 實(shí)現(xiàn)專業(yè)的 Container
連接層解決后,我們?cè)僦攸c(diǎn)設(shè)計(jì)實(shí)現(xiàn)容器。先引入 Wrapper,實(shí)現(xiàn) Context 與 Wrapper,形成兩層容器,將整個(gè)框架進(jìn)一步按照功能拆分成不同模塊,每一部分各司其職。最后引入日志、過(guò)濾器、監(jiān)聽(tīng)器等通用組件。這一部分之后,Tomcat 的核心就模仿出來(lái)了。
第四章 完成 MiniTomcat 及擴(kuò)展討論
這個(gè)部分我們將考慮多應(yīng)用支持,進(jìn)一步拆分功能,BootStrap 只負(fù)責(zé)啟動(dòng)服務(wù)器,業(yè)務(wù)代碼都在 Context 內(nèi)運(yùn)行,支持不同路由轉(zhuǎn)發(fā)到不同應(yīng)用之中,而應(yīng)用之前相互隔離。這個(gè)需求就要求我們改變標(biāo)準(zhǔn)的 Java 類加載機(jī)制,自定義加載過(guò)程。最后通過(guò) web.xml 各項(xiàng)配置,啟動(dòng) Server,實(shí)現(xiàn)完整而基本的 Tomcat。
作為擴(kuò)展,我們會(huì)探討如何把 MiniSpring 打包放在 MiniTomcat 中運(yùn)行,形成 Mini 系列的核心環(huán)境,還將探討將網(wǎng)絡(luò) I/O 擴(kuò)展為支持 NIO,以支持高并發(fā)場(chǎng)景的方案。
課程目錄

立即購(gòu)買
本站內(nèi)容均為網(wǎng)友上傳分享,本站僅負(fù)責(zé)分類整理,如有任何問(wèn)題可聯(lián)系我們(點(diǎn)這里聯(lián)系)反饋。