tomcat核心組件及原理概述

目錄

1. tomcat概述

1.1 概念

1.2 官網地址

2. 基本使用

2.1下載

3. 整體架構

3.1 核心組件

3.2 從web.xml配置和模塊對應角度

3.3 如何處理請求

4. 配置JVM參數

5. 附錄


1. tomcat概述

1.1 概念

什么是tomcat

Tomcat是一個開源、免費、輕量級的Web服務器。

????????Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其他一些公司及個人共同開發而成。由于有了Sun 的參與和支持,最新的Servlet 和JSP 規范總是能在Tomcat 中得到體現,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 規范。因為Tomcat 技術先進、性能穩定,而且免費,因而深受Java 愛好者的喜愛并得到了部分軟件開發商的認可,成為比較流行的Web 應用服務器。

什么是Web服務器

Web服務器是安裝在服務端的一款軟件,它對HTTP協議的操作進行了封裝使得程序員不必直接對協議進行相關操作,讓Web開發變得更加便捷。Web服務器的主要功能就是提供網上信息瀏覽服務,當我們將自己寫的Web項目部署道Web服務器上,只要啟動Web服務器,就能直接通過瀏覽器訪問我們的Web項目了。

目前比較有名的Web服務器有:Apache、Nginx、ISS。

拓展

  • Tomcat和Apache的聯系:Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行
  • Tomcat僅支持JDBC、JSP、Servlet等少量JavaEE規范1
  • 因為Tomcat支持Servlet/JSP規范,所以Tomcat也被稱為Web容器、Servlet容器。Servlet需要依賴Tomcat才能運行。
  • Web服務器、服務端、服務器的區別和聯系
    • 服務器是一種特殊的計算機,它比普通計算機運行更快、負載更高、價格更貴,屬于硬件范疇;
    • 服務端是是指為客戶端提供服務的計算機,服務的內容諸如:提供數據的保存、數據的訪問……屬于硬件范疇;
    • Web服務器是指安裝再服務端的一款軟件,主要功能是提供網上信息瀏覽服務,但是只能響應HTTP的請求數據,屬于軟件范疇。
  • 能讓你寫的網站被所有人訪問的三要素:服務器+域名+網站

1.2 官網地址

Apache Tomcat? - Welcome!

文件目錄

目錄文件說明
bin/可執行文件目錄
startup.bat ,
startup.sh

存放Tomcat的啟動、停止等批處理腳本文件

啟動:

startup.bat

./startup.sh

shutdown.bat ,
shutdown.sh

用于在windows和linux下的停止腳本

終止:

shutdown.bat

./shutdown.sh

conf/

用于存放Tomcat的相關配置文件

Catalina

用于存儲針對每個虛擬機的Context配置

context.xml

用于定義所有web應用均需加載的Context配 置,如果web應用指定了自己的context.xml ,該文件將被覆蓋

catalina.properties

Tomcat 的環境變量配置

catalina.policy

Tomcat 運行的安全策略配置

logging.properties

Tomcat 的日志配置文件, 可以通過該文件修 改Tomcat 的日志級別及日志路徑等

server.xml

Tomcat 服務器的核心配置文件

tomcat-users.xml

定義Tomcat默認的用戶及角色映射信息配置

web.xml

Tomcat 中所有應用默認的部署描述文件, 主 要定義了基礎Servlet和MIME映射。

lib

/

Tomcat 服務器的依賴包

logs

/

Tomcat 默認的日志存放目錄

webapps

/

Tomcat 默認的Web應用部署目錄

work

/

Web 應用JSP代碼生成和編譯的臨時

2. 基本使用

2.1下載

關于zip、tar.gz詳解

tomcat下載以及各個版本(zip,tar.gz,32-bit Windows zip,64-bit Windows zip,32-bit/64-bit Windows Service Instal_tomcat的tar.gz與zip-CSDN博客

3. 整體架構

?

3.1 核心組件

Catalina的各個組件的作用如下:

  • Server: 表示服務器,它提供了一種優雅的方式來啟動和停止整個系統,不必單獨啟停連接器和容器;它是Tomcat構成的頂級構成元素,所有一切均包含在Server中;

  • Service: 表示服務,Server可以運行多個服務。比如一個Tomcat里面可運行訂單服務、支付服務、用戶服務等等;Server的實現類StandardServer可以包含一個到多個Services, Service的實現類為StandardService調用了容器(Container)接口,其實是調用了Servlet Engine(引擎),而且StandardService類中也指明了該Service歸屬的Server;

    • Connector: 表示連接器, 它將Service和Container連接起來,首先它需要注冊到一個Service,它的作用就是把來自客戶端的請求轉發到Container(容器),這就是它為什么稱作連接器, 它支持的協議如下:

      • 支持AJP協議
      • 支持Http協議
      • 支持Https協議
    • Service內部還有各種支撐組件,下面簡單羅列一下這些組件

      • Manager -- 管理器,用于管理會話Session
      • Logger -- 日志器,用于管理日志
      • Loader -- 加載器,和類加載有關,只會開放給Context所使用
      • Pipeline -- 管道組件,配合Valve實現過濾器功能
      • Valve -- 閥門組件,配合Pipeline實現過濾器功能
      • Realm -- 認證授權組件
    • Container: 表示容器,可以看做Servlet容器;引擎(Engine)、主機(Host)、上下文(Context)和Wraper均繼承自Container接口,所以它們都是容器。

      • Engine --?表示整個Catalina的Servlet引擎,用來管理多個虛擬站點,一個Service最多只能有一個Engine,但是一個引擎可包含多個Host。
      • Host --?代表一個虛擬主機或者說一個站點,可以給Tomcat配置多個虛擬主機地址,而一個虛擬主機下可包含多個Context。
      • Context --?表示一個Web應用程序, 一個Web應用可包含多個Wrapper。
      • Wrapper --?表示一個Servlet,Wrapper 作為容器中的最底層,不能包含子容器。

    3.2 從web.xml配置和模塊對應角度

    <?xml version="1.0" encoding="UTF-8"?><Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener" /><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /><GlobalNamingResources><Resource name="UserDatabase" auth="Container"type="org.apache.catalina.UserDatabase"description="User database that can be updated and saved"factory="org.apache.catalina.users.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml" /></GlobalNamingResources><Service name="Catalina"><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><Engine name="Catalina" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /></Host></Engine></Service>
    </Server>

    3.3 如何處理請求

    啟動流程

    啟動流程主要分為兩塊內容:

    1)初始化:解析Server.xml文件,生成Server等實例,并對Connector和Container等進行初始化操作。

    2)啟動:調用start()方法啟動Connector和Container等。其中Container部分,context啟動的時候會解析web.xml,并觸發contextConfig這個監聽器,從而創建wrapper容器,初始化Servlet實例,如果該Servlet標識了loadOnStartup那么在start()過程中將會調用其init()方法進行Servlet初始化。

    從tomcat的啟動流程圖,我們可以看到它和我們日常編寫webapp應用接入點就在于創建Servlet的容器,所以我們的業務代碼就是基于Servlet編寫,使用tomcat則無需關心Servlet如何對外提供服務,簡化了開發流程。

    通過一個完整的HTTP請求,我們還需要把它貫穿起來

    假設來自客戶的請求為:http://localhost:8080/test/index.jsp 請求被發送到本機端口8080,被在那里偵聽的Coyote HTTP/1.1 Connector,然后

    • Connector把該請求交給它所在的Service的Engine來處理,并等待Engine的回應
    • Engine獲得請求localhost:8080/test/index.jsp,匹配它所有虛擬主機Host
    • Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的默認主機)
    • localhost Host獲得請求/test/index.jsp,匹配它所擁有的所有Context
    • Host匹配到路徑為/test的Context(如果匹配不到就把該請求交給路徑名為""的Context去處理)
    • path="/test"的Context獲得請求/index.jsp,在它的mapping table中尋找對應的servlet
    • Context匹配到URL PATTERN為*.jsp的servlet,對應于JspServlet類,構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet或doPost方法
    • Context把執行完了之后的HttpServletResponse對象返回給Host
    • Host把HttpServletResponse對象返回給Engine
    • Engine把HttpServletResponse對象返回給Connector
    • Connector把HttpServletResponse對象返回給客戶browser

    處理請求流程

    4. 配置JVM參數

    方法一? 直接修改catalina文件

    # 打開 catalina.sh 文件
    vim $CATALINA_HOME/bin/catalina.sh

    # 找到或添加 JAVA_OPTS 變量設置
    # 在 cygwin=false 之前添加以下內容


    JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx1024m -XX:+UseG1GC"

    # 保存并關閉文件
    # 重啟 Tomcat
    $CATALINA_HOME/bin/shutdown.sh
    $CATALINA_HOME/bin/startup.sh

    方法二??使用CATALINA_OPTS環境變量

    在Tomcat的啟動腳本中,你可以通過設置CATALINA_OPTS環境變量來添加JVM參數。

    對于Linux/Unix:

    1. 使用CATALINA_OPTS環境變量
    在Tomcat的啟動腳本中,可以通過設置CATALINA_OPTS環境變量來添加JVM參數。
    找到Tomcat安裝目錄下的bin目錄。

    打開setenv.sh文件(如果不存在,可以自己創建一個)

    在文件中添加或修改CATALINA_OPTS變量,例如:

    export CATALINA_OPTS="-Xms512M -Xmx1024M -XX:MaxPermSize=256m"

    保存文件并重新啟動Tomcat。

    對于Windows:

    找到Tomcat安裝目錄下的bin目錄。

    打開setenv.bat文件(如果不存在,你可以自己創建一個)。

    在文件中添加或修改CATALINA_OPTS變量,例如:

    set CATALINA_OPTS=-Xms512M -Xmx1024M -XX:MaxPermSize=256m

    保存文件并重新啟動Tomcat。

    5. 附錄

    Spring MVC是如何和Tomcat關聯到一塊的

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/web/67653.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/web/67653.shtml
    英文地址,請注明出處:http://en.pswp.cn/web/67653.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    科技快訊 | OpenAI首次向免費用戶開放推理模型;特朗普與黃仁勛會面;雷軍回應“10后小學生深情表白小米SU7”

    不用開口&#xff1a;谷歌 AI 幫你致電商家&#xff0c;價格、預約一鍵搞定 谷歌在1月30日推出Search Labs中的“Ask for Me”實驗性功能&#xff0c;用戶可利用AI代替自己致電商家咨詢價格和服務。該功能已與美汽車修理廠和美甲沙龍店合作&#xff0c;用戶需加入Search Labs并…

    帆軟 FCA -業務分析師認證學習

    帆軟 FCA -業務分析師認證學習 認證概述 適合人群 企業中有需求管理、指標梳理、業務邏輯梳理、項目規劃等需求的人員&#xff0c;想提升綜合數據能力、推進數據應用落地的業務/IT骨干。 具體-FCA-業務分析理論 考試要求&#xff1a; FCA-業務分析理論考試- 費用&#xff1a…

    Vue.js路由管理與自定義指令深度剖析

    Vue.js 是一個強大的前端框架,提供了豐富的功能來幫助開發者構建復雜的單頁應用(SPA)。本文將詳細介紹 Vue.js 中的自定義指令和路由管理及導航守衛。通過這些功能,你可以更好地控制視圖行為和應用導航,從而提升用戶體驗和開發效率。 1 自定義指令詳解 1.1 什么是自定義…

    Maya軟件安裝步驟與百度網盤鏈接

    軟件簡介&#xff1a; MAYA軟件是Autodesk旗下的著名三維建模和動畫軟件。maya軟件功能更為強大&#xff0c;體系更為完善&#xff0c;因此國內很多的三維動畫制作人員都開始轉向maya&#xff0c;maya軟件已成為三維動畫軟件的主流。 百度網盤鏈接: https://pan.baidu.com/s…

    kamailio的部分模塊的解釋及代碼示例【文章由DeekSeek大模型提供】

    以下是 Kamailio 中這些模塊的詳細說明及示例代碼&#xff1a; 1. tls.so 作用&#xff1a;提供 TLS 支持&#xff0c;用于加密 SIP 通信。示例&#xff1a;loadmodule "tls.so" modparam("tls", "certificate", "/etc/kamailio/tls/serve…

    深入理解linux中的文件(上)

    1.前置知識&#xff1a; &#xff08;1&#xff09;文章 內容 屬性 &#xff08;2&#xff09;訪問文件之前&#xff0c;都必須打開它&#xff08;打開文件&#xff0c;等價于把文件加載到內存中&#xff09; 如果不打開文件&#xff0c;文件就在磁盤中 &#xff08;3&…

    一個用于測試的 HL7 Server

    說明 一個用于測試的 HL7 Server。在過NIST的認證時&#xff0c;需要演示檢驗數據通過HL7進行傳輸&#xff0c;所以寫了這工具。 HL7的消息解析和編碼使用了NHapi。包含兩個服務&#xff1a; ReceiveServiceSendService 這2個服務都繼承自 BaseService public class BaseSe…

    使用 Go 和 gqlgen 實現 GraphQL API:實戰指南

    使用 Go 和 gqlgen 實現 GraphQL API&#xff1a;實戰指南 在本文中&#xff0c;我將分享如何使用 Go 語言和 gqlgen 框架實現一個完整的 GraphQL API。我們將構建一個包含用戶、文章和評論功能的博客系統 API。 技術棧 Gogqlgen (GraphQL 框架)MySQL (數據存儲)Redis (緩存…

    matlab快速入門(2)-- 數據處理與可視化

    MATLAB的數據處理 1. 數據導入與導出 (1) 從文件讀取數據 Excel 文件&#xff1a;data readtable(data.xlsx); % 讀取為表格&#xff08;Table&#xff09;CSV 文件&#xff1a;data readtable(data.csv); % 自動處理表頭和分隔符文本文件&#xff1a;data load(data.t…

    洛谷題目 P5994 [PA 2014] Kuglarz 題解 (本題較難)

    題目傳送門&#xff1a; P5994 [PA 2014] Kuglarz - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 前言&#xff1a; 本題涉及到最小生成樹中的 kruskal 算法和并查集算法&#xff0c;圖論基礎概念兩大知識點&#xff0c;瞎按對萊索沒有學過圖論的或最小生成樹的可能會對這道…

    消息隊列篇--通信協議篇--網絡通信模型(OSI7層參考模型,TCP/IP分層模型)

    一、OSI參考模型&#xff08;Open Systems Interconnection Model&#xff09; OSI參考模型是一個用于描述和標準化網絡通信功能的七層框架。它由國際標準化組織&#xff08;ISO&#xff09;提出&#xff0c;旨在為不同的網絡設備和協議提供一個通用的語言和結構&#xff0c;以…

    C# Winform制作一個登錄系統

    using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace 登錄 {p…

    10.7 LangChain Models深度解析:解鎖大模型集成與調優的全景攻略

    LangChain Models深度解析:解鎖大模型集成與調優的全景攻略 關鍵詞: LangChain Models模塊、大模型集成、LLM調用優化、多模型管理、本地模型部署 一、Models模塊的定位:大模型應用的“中央調度器” 傳統開發的痛點: 碎片化集成:每個模型需單獨編寫適配代碼性能黑洞:缺…

    記一次STM32編譯生成BIN文件過大的問題(基于STM32CubeIDE)

    文章目錄 問題描述解決方法更多拓展 問題描述 最近在一個項目中使用了 STM32H743 單片機&#xff08;基于 STM32CubeIDE GCC 開發&#xff09;&#xff0c;它的內存分為了 DTCMRAM RAM_D1 RAM_D2 …等很多部分。其中 DTCM 的速度是比通常的內存要快的&#xff0c;缺點是不支持…

    996引擎 -地圖-添加安全區

    996引擎 -地圖-添加安全區 文件位置配置 cfg_startpoint.xls特效效果1345參考資料文件位置 文件位置服務端D:\996M2-lua\MirServer-lua\Mir200客戶端D:\996M2-lua\996M2_debug\dev配置 cfg_startpoint.xls 服務端\Mir200\Envir\DATA\cfg_startpoint.xls 填歪了也有可能只畫一…

    【leetcode強化練習·二叉樹】同時運用兩種思維解題

    本文參考labuladong算法筆記[【強化練習】同時運用兩種思維解題 | labuladong 的算法筆記] 有的題目可以同時用「遍歷」和「分解問題」兩種思路來解&#xff0c;你可以利用這些題目訓練自己的思維。 559. N 叉樹的最大深度 | 力扣 | LeetCode | 給定一個 N 叉樹&#xff0c;…

    棧和隊列特別篇:棧和隊列的經典算法問題

    圖均為手繪,代碼基于vs2022實現 系列文章目錄 數據結構初探: 順序表 數據結構初探:鏈表之單鏈表篇 數據結構初探:鏈表之雙向鏈表篇 鏈表特別篇:鏈表經典算法問題 數據結構:棧篇 數據結構:隊列篇 文章目錄 系列文章目錄前言一.有效的括號(leetcode 20)二.用隊列實現棧(leetcode…

    ios swift畫中畫技術嘗試

    繼上篇&#xff1a;iOS swift 后臺運行應用嘗試失敗-CSDN博客 為什么想到畫中畫&#xff0c;起初是看到后臺模式里有一個picture in picture&#xff0c;去了解了后發現這個就是小窗口視頻播放&#xff0c;方便用戶執行多任務。看小窗口視頻的同時&#xff0c;可以作其他的事情…

    OpenAI推出o3-mini推理模型,首次免費開放,性能超越o1,AIME測試準確率高達87.3%

    OpenAI在2025年初推出了一款新的推理模型o3-mini&#xff0c;這款模型標志著公司在提升性能的同時也降低了成本&#xff0c;并且首次向免費用戶提供訪問權限。o3-mini是OpenAI推理系列中最新、最具成本效益的模型&#xff0c;在科學、數學、編程等領域的性能顯著超越了之前的o1…

    人生不止于職業發展

    0 你的問題&#xff0c;我知道&#xff01; 工作意義是啥&#xff1f;職業發展在人生啥角色&#xff1f; 1 工作意義 農村人努力學習考上大學&#xff0c;得好工作&#xff0c;為逃離同村同齡人十幾歲就工廠打工命運&#xff0c;過不凡人生&#xff0c;實現改命的唯一途徑。…