一、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組件間可以共享的線程池