天天看點

【tomcat系列】詳解tomcat架構(上篇)

java中,常用的web伺服器一般由tomcat,weblogic,jetty,undertwo等,但從使用者使用廣泛度來說,tomcat使用者量相對比較大一些,當然這也基于它開源和免費的特點。

從軟體架構的發展角度來看,軟體架構大緻經曆了如下幾個階段(當然,我們這篇文章不是主講架構的,是以隻是簡單提一下架構發展,至于具體的架構,會在後面的文章中陸續與大家分享架構系列):

【tomcat系列】詳解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源碼,tomcat簡要架構可歸結為如下(關于更詳細的架構圖和架構細節,将在詳解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目錄結構

【tomcat系列】詳解tomcat架構(上篇)

bin:可執行檔案,.sh結尾的表示linux可執行檔案,.bat結尾的表示linux可執行檔案

conf:配置檔案

lib:tomcat相關jar包

temp:臨時檔案

webapps:存放項目

work:工作目錄

三 Tomcat各目錄結構詳細介紹

(一)bin

bin目錄存放可執行檔案,簡要結束常用指令:

【tomcat系列】詳解tomcat架構(上篇)

這裡主要解釋如下通用的指令,其他指令就不一一介紹

startup.sh  程式項目指令檔案

version.sh  檢視tomcat版本相關資訊指令檔案

shutdown.sh  關閉程式指令

(二) conf

conf檔案夾用來存放tomcat相關配置檔案

【tomcat系列】詳解tomcat架構(上篇)

1.catalina.policy

項目安全檔案,用來防止欺騙代碼或JSP執行帶有像System.exit(0)這樣的指令的可能影響容器的破壞性代碼. 隻有當Tomcat用-security指令行參數啟動時這個檔案才會被使用,即啟動tomcat時,startup.sh  -security。

【tomcat系列】詳解tomcat架構(上篇)

      上圖中,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 

監視并加載資源檔案,當監視的檔案發生發生變化時,自動加載

【tomcat系列】詳解tomcat架構(上篇)

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包。

【tomcat系列】詳解tomcat架構(上篇)

每個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

【tomcat系列】詳解tomcat架構(上篇)

catalina.date.log(如catalina.2020-03-17.log):

表示tomcat啟動檔案,需要注意的是,該檔案隻有在重新開機tomcat情況下,才會産生。

【tomcat系列】詳解tomcat架構(上篇)

manager.date.log(如manager.2020-03-17.log): 

表示通路webapps下manager項目日志,如通路 ip:8080/manager/html

【tomcat系列】詳解tomcat架構(上篇)

host-manager.date.log(如host-manager.2020-03-17.log):   

表示通路webapps下host-manager項目日志,如通路 ip:8080/host-manager/html

【tomcat系列】詳解tomcat架構(上篇)

localhost.date.log(如localhost.2020-03-17.log):

(?)表示tomcat在啟動時,自身通路服務,這個日志隻記錄tomcat通路日志,而非業務項目日志

【tomcat系列】詳解tomcat架構(上篇)

localhost_access_log.date.txt(如localhost_access_log.2020-03-17.txt)

表示通路tomcat所有項目的日志記錄,如下表示通路項目localhost,host-manager.html,manager.html和test/index.html四個項目日志記錄

【tomcat系列】詳解tomcat架構(上篇)

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

 可以轉載該部落格,但必須著名部落格來源