【tomcat系列】詳解tomcat架構(上篇)
java中,常用的web伺服器一般由tomcat,weblogic,jetty,undertwo等,但從使用者使用廣泛度來說,tomcat使用者量相對比較大一些,當然這也基於它開源和免費的特點。
從軟體架構的發展角度來看,軟體架構大致經歷瞭如下幾個階段(當然,我們這篇文章不是主講架構的,因此只是簡單提一下架構發展,至於具體的架構,會在後面的文章中陸續與大家分享架構系列):
那麼從java web角度來說,架構大致經歷了:
Sevlet架構=》SSH架構=》SSM架構=》分散式垂直架構=》SOA架構=》微服務架構
從當前企業使用的架構角度來說,企業使用SSM架構專案比較多,SSH基本別淘汰(大部分都是老專案維護),最近2年,也有一部分企業開始轉向微服務架構了。
基於java spring生態來說,如今,大部分中小型企業都基本使用springboot,springboot本身集成了tomcat,jetty和undertwo容器,那麼我們為什麼要花時間來研究tomcat呢?
1.當前tomcat依然是主流java web容器,研究它,符合java 技術生態發展;
2.在java web專案調優中,如ssm專案中,在優化專案時,jvm和tomcat同樣重要,都需要優化;
3.儘管springboot內建了tomcat容器,且配置了預設的tomcat引數,但當預設的tomcat引數滿足不了專案優化要求時,就需要優化人員手動進行相關的引數優化,因此研究tomcat非常必要;
4.熟悉tomcat架構,是後續進行專案優化的基礎,也是必備條件
基於如上原因但不限於如上原因,本篇文章將從tomcat架構角度分析tomca架構。本篇檔案主要內容包括:簡要分析tomcat架構和tomcat專案檔案介紹,更深入的架構淺析,將在下篇文章中講述。
一 Tomcat架構
通過tomcat官方發行,tomcat發展還是比較快的,目前已經更新到tomcat 10了 ,但當前大部分企業使用的tomcat為9或8版本。
通過閱讀tomcat原始碼,tomcat簡要架構可歸結為如下(關於更詳細的架構圖和架構細節,將在詳解tomcat架構(下篇)中分享)。
從上圖中,可以得出:
1.tomcat重要主件:
Server主件:作為tomcat伺服器主件
service主件:作為tomcat服務主件,即向外提供服務,由一個或多個Host組成
Connector主件:表示連線主件,外部訪問tomcat時,通過該主鍵訪問,其支援的比較重要的三個核心協議,http,https和ajp
Engine主件:tomcat引擎主件
Host主件:Tomcat主機主件
Context:tomcat專案主件,一個Context代表也給tomcat專案
2.tomcat支援的三大協議
http協議,ajp協議,https協議。
關於更復雜的架構細節,在下一篇文章中分享。
二 tomcat目錄結構
bin:可執行檔案,.sh結尾的表示linux可執行檔案,.bat結尾的表示linux可執行檔案
conf:配置檔案
lib:tomcat相關jar包
temp:臨時檔案
webapps:存放專案
work:工作目錄
三 Tomcat各目錄結構詳細介紹
(一)bin
bin目錄存放可執行檔案,簡要結束常用命令:
這裡主要解釋如下通用的命令,其他命令就不一一介紹
startup.sh 程式專案命令檔案
version.sh 檢視tomcat版本相關資訊命令檔案
shutdown.sh 關閉程式命令
(二) conf
conf資料夾用來存放tomcat相關配置檔案
1.catalina.policy
專案安全檔案,用來防止欺騙程式碼或JSP執行帶有像System.exit(0)這樣的命令的可能影響容器的破壞性程式碼. 只有當Tomcat用-security命令列引數啟動時這個檔案才會被使用,即啟動tomcat時,startup.sh -security。
上圖中,tomcat容器下部署兩個專案,專案1和專案2。由於專案1中有程式碼System.exit(0),當訪問該程式碼時,該程式碼會導致整個tomcat停止,從而也導致專案2停止。
為了解決因專案1存在欺騙程式碼或不安全程式碼導致損害Tomcat容器,從而影響其他專案正常執行的問題,啟動tomcat容器時,加上-security引數就,即startup.sh -security,如此即使專案1中有程式碼System.exit(0),也只會僅僅停止專案1,而不會影響Tomcat容器,然而起作用的配置檔案就是catalina.policy檔案。
2.catalina.properties
配置tomcat啟動相關資訊檔案
3.context.xml
監視並載入資原始檔,當監視的檔案發生發生變化時,自動載入
4.jaspic-providers.xml 和 jaspic-providers.xsd
這兩個檔案不常用
5.logging.properties
該檔案為tomcat日誌檔案,包括配置tomcat輸出格式,日誌級別等
6.server.xml
tomcat核心架構主件檔案,在下一一篇文章中重點從架構角度分析。
7.tomcat-users.xml和tomcat-users.xsd
tomcat使用者檔案,如配置遠端登陸賬號,參考我的另外一篇博文
https://blog.csdn.net/u010228798/article/details/104822043
tomcat-users.xsd 為tomcat-users.xml描述和約束檔案
8.web.xml
tomcat全域性配置檔案。
(三) lib
lib資料夾主要用來存放tomcat依賴jar包,如下為tomcat 10的lib資料夾下的相關jar包。
每個jar包功能,這裡就不講解了,這裡主要分析ecj-4.13.jar,這個jar包起到將.java編譯成.class位元組碼作用。
假設要編譯MyTest.java,那麼jdk會執行兩步:
第一步:將MyTest.java編譯成MyTest.class
javac MyTest.java
第二步:執行MyTest.class
java MyTest.class
那麼,使用ecj-4.13.jar如執行MyTest.java呢?
java -jar ecj-4.13.jar MyTest.java
(四)logs
該資料夾表示tomcat日誌檔案,大致包括如下六類檔案:
catalina.date.log,catalina.out,host-manager.date.log,localhost.date.log.localhost_access_log.date.txt和manager.date.log
catalina.date.log(如catalina.2020-03-17.log):
表示tomcat啟動檔案,需要注意的是,該檔案只有在重啟tomcat情況下,才會產生。
manager.date.log(如manager.2020-03-17.log):
表示訪問webapps下manager專案日誌,如訪問 ip:8080/manager/html
host-manager.date.log(如host-manager.2020-03-17.log):
表示訪問webapps下host-manager專案日誌,如訪問 ip:8080/host-manager/html
localhost.date.log(如localhost.2020-03-17.log):
(?)表示tomcat在啟動時,自身訪問服務,這個日誌只記錄tomcat訪問日誌,而非業務專案日誌
localhost_access_log.date.txt(如localhost_access_log.2020-03-17.txt)
表示訪問tomcat所有專案的日誌記錄,如下表示訪問專案localhost,host-manager.html,manager.html和test/index.html四個專案日誌記錄
catalina.out:
表示catalina.date.log日誌彙總,如2020.3.7和2020.3.8兩天分別啟動了tomcat,則會闡述如下兩個日誌:
catalina.2020-03-17.log和catalina.2020-03-18.log
那麼,catalina.out內容就是catalina.2020-03-17.log加catalina.2020-03-17.log日誌內容
四 本系列文章
1.基於linux和windows部署tomcat
2.配置tomcat遠端訪問:https://blog.csdn.net/u010228798/article/details/104822043
3.tomcat部署程式的四種方式
4.詳解tomcat架構(上篇)
5.詳解tomcat架構(下篇)
6.詳解JVM優化相關引數
7.詳解jvm優化工具:jconsole和jvisualvm
8.使用idea解讀tomcat原始碼
9.解決idea下亂碼問題:https://blog.csdn.net/u010228798/article/details/93355667
10.優化tomcat
五 版權區
感謝您的閱讀,若有不足之處,歡迎指教,共同學習、共同進步。
從入門到架構群:820424。
極少部分文章利用讀書、參考、引用、抄襲、複製和貼上等多種方式整合而成的,大部分為原創。
如您喜歡,麻煩推薦一下;如您有新想法,歡迎提出,郵箱:[email protected]。
demo訪問地址:http://106.14.139.196/SaleManage/Index ,本套原始碼49元,需要購買請諮詢:2098469527
可以轉載該部落格,但必須著名部落格