Tomcat體系架構第一篇

一、Tomcat的定義

Tomcat是一款開源輕量級Web應用服務器,是一款優秀的Servlet容器實現。

Servlet是Java Servlet的簡稱,稱爲小服務程序或服務連接器,用Java編寫的服務器端程序,具有獨立於平臺和協議的特性,主要功能在於交互地瀏覽和生成數據,生成動態Web內容。

Servlet嚴格來講是指Java語言實現的一個接口,一般情況下我們說的Servlet是指實現了這個Servlet接口的類。

Servlet生命週期

  • 實例化:執行init()方法,只執行一次

  • 請求處理:執行service()方法,執行多次,根據不同的方法調用doGet()、doPost以及其他方法

  • 銷燬:執行destroy()方法,只執行一次

Servlet的處理流程

  • 客戶端發送Http請求,被委派到Servlet容器

  • Servlet容器收到請求後,會加載Servlet,然後調用service()方法

  • Servlet容器處理由多個線程產生的多個請求,每個線程執行單一的Servlet實例的service()方法

二、Tomcat啓動

一般啓動

直接啓動Tomcat的bin目錄下的啓動文件startup.bat/startup.sh

IDE中啓動

在ide中配置Tomcat Server,然後啓動

嵌入式啓動

Springboot中在main方法嵌入式啓動Tomcat

三、Tomcat項目部署

隱式部署

直接將項目文件夾、war包放到webapps目錄下,Tomcat會根據文件夾名稱自動生成虛擬路徑,修改項目相關文件以及Tomecat配置文件,需要重啓Tomcat服務器,訪問路徑爲 http://localhost:8080

顯示部署

  • 添加context元素:在server.xml的Host標籤內增加Context元素(指定路徑和文件地址),修改之後需要重啓Tomcat服務器,其中/demo這個虛擬路徑映射到D:\project\demo目錄下(war會解壓成文件),訪問路徑爲 http://localhost:8080/demo

    <Host name="localhost">
        <Context path="/demo" docBase="D:\project\demo.war" />
    </Host>
  • 創建xml文件:在conf/Catalina/localhost中創建xml文件,訪問路徑爲文件名,訪問路徑爲 http://localhost:8080/demo

    # 在localhost目錄下創建demo.xml,內容如下
    <Context docBase="D:\project\demo" />

三種部署方式對比

  • 隱式部署:可以很快部署,需要手動將Web應用放到webapps下;操作中不是很人性化

  • 添加context元素:配置速度快;修改server.xml文件需要重新啓動Tomcat服務器,重新部署

  • 創建xml文件:服務器後臺會自動部署,修改一次後臺部署一次,不用重複啓動Tomcat服務器,比較智能化

四、Tomcat目錄結構

bin執行腳本目錄

  • startup文件:主要是檢查catalina.bat/catalina.sh執行所需的環境,並調用catalina.bat/catalina.sh啓動Tomcat

  • catalina文件:真正啓動Tomcat的文件,可以在文件中設置jvm參數,進行性能調優

  • shutdown文件:關閉Tomcat

  • version文件:查看當前Tomcat的版本號

  • configtest文件:檢驗Tomcat配置文件server.xml的格式、內容等是否合法和正確

  • service文件:安裝Tomcat服務,可用net start tomcat 啓動Tomcat

conf配置文件目錄

web.xml:Tomcat中所有應用默認的部署描述文件,主要定義了基礎的Servlet和MIME映射(mime-mapping文件類型即Tomcat處理的文件類型),如果部署的應用中不包含web.xml,則加載該文件,如果包含Tomcat啓動時將該文件與應用的web.xml文件進行合併;加載Tomcat內置的servlet(DefaultServlet--加載靜態文件html,js,jpg等;JspServlet--處理jsp)

server.xml:配置Tomcat服務的文件,包括Listener(監聽器)、Connector(鏈接器)等

context.xml:用於自定義所有Web應用均需要加載的Context配置,如果Web應用定義了本身的context.xml,那個該文件的配置將被覆蓋

catalina.policy:權限相關Permission,Tomcat是運行在jvm上的,所以有些默認的權限

tomcat-users.xml:配置Tomcat的管理用戶信息

logging.properties:設置Tomcat日誌

說明:context.xml與server.xml中配置context的區別:server.xml是不可動態重加載的資源,服務器啓動之後,要修改該文件,就必須重啓服務器才能重新加載;而context.xml文件則不然,Tomcat服務器會定時去掃描該文件,一旦發現文件被修改(時間戳改變了),就會自動重新加載該文件,而不需要重啓服務器

lib目錄

Tomcat的類庫,如果需要添加Tomcat依賴的jar包,放到該目錄下;也可以把應用依賴的jar包放到該目錄,這個目錄中的jar所有項目都可以共享,但是當應用放到其他Tomcat時,就不能共享該目錄下的jar包,所以建議只把Tomcat需要的jar包放到該目錄下

logs目錄

存放日誌文件的目錄,記錄了Tomcat啓動和關閉的信息

  • localhost-xxx.log:Web應用的內部程序日誌,建議保留

  • catalina-xxx.log:控制檯日誌

  • host-manager.xxx.log:Tomcat管理頁面中的host-manager的操作日誌,建議關閉

  • localhost_access_log_xxx.log:用戶請求Tomcat的訪問日誌(在conf/server.xml中配置),建議關閉

webapps目錄

存放Web項目的目錄,其中每個文件夾都是一個項目(都可以刪除);其中ROOT是一個特殊的項目,在地址欄中沒有給出項目目錄時,對應的就是ROOT項目,其他的文件夾就是項目名

work目錄

運行時生成的文件,最終運行的文件都在這裏。通過wenapps中的項目生成的,這個目錄下的內容可以刪除,再次運行時會再次生成;當客戶端用戶訪問一個JSP文件時,Tomcat會通過JSP生成Java文件,然後編譯Java文件生成class文件,生成的java和class文件都會存放在這個目錄下

temp目錄

存放Tomcat的臨時文件,這個目錄下的內容可以在停止Tomcat後刪除

五、Tomcat組件及架構

Server

Server是最頂級的組件,代表Tomcat的運行組件;

  • 提供了監聽機制,用於在Tomcat整個生命週期中對不同時間進行處理

  • 提供Tomcat容器全局的命名資源實現,JNDI

  • 監聽某個端口以接受Shutdown命令,用於關閉Tomcat

Service

一個Service維護多個Connection和一個Container

Connector組件

鏈接器,監聽轉換Socket請求,將請求交給Container處理,支持不同協議以及不同的I/O方式

Container

表示能夠執行客戶端請求並返回響應的一類對象,其中有不同級別的容器(Engine、Host、Context、Wrapper)

Engine

整個Servlet引擎,最高級的容器對象

Host

表示Servlet引擎中的虛擬機,主要與域名有關,一個服務器有多個域名是可以使用多個Host

Context

用於表示ServletContext,一個ServletContext表示一個獨立的Web應用

Wrapper

用於表示Web應用中定義的Servlet

Executor

Tomcat組件間可以共享的線程池

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章