【Apache Tomcat】

目錄

  • Tomcat 基本簡介
  • Tomcat 架構組成
  • Tomcat 的目錄結構
  • Tomcat 的工作原理
  • Tomcat 的配置文件
  • Tomcat 與其他服務器對比
  • Tomcat 使用場景
  • Tomcat 與 Spring Boot
  • 常見問題與優化

Tomcat(全稱 Apache Tomcat)是由 Apache 軟件基金會開發和維護的一款 開源的 Web 服務器與 Servlet 容器,用于運行基于 Java 的 Web 應用程序。它廣泛應用于中小型企業和開發測試環境中,是學習和部署 Java Web 的首選服務器。

Tomcat 基本簡介

  • 開發者:Apache 軟件基金會
  • 編程語言:Java
  • 最新版本:可參考官網 https://tomcat.apache.org
  • 核心功能:
    • 支持 Servlet 規范(如 Servlet 4.0)
    • 支持 JSP(Java Server Pages)
    • 支持 WebSocket
    • 支持 HTTP/1.1、HTTP/2 等協議(版本依賴)

Tomcat 實際上是一個輕量級的 Servlet 容器(Servlet Container),它也可以當作 HTTP Web 服務器來使用,但它不是一個完整的 Java EE 應用服務器(如 GlassFish、WildFly)。

Tomcat 架構組成

Tomcat 主要由以下幾個核心組件組成:

  1. Server
    • 表示整個服務器實例,server.xml 配置文件中最頂層的元素。
  2. Service
    • Server 可以包含多個 Service。
    • 每個 Service 由 Connector 和 Engine 兩部分組成。
  3. Connector(連接器)
    • 負責與客戶端通信(接收 HTTP 請求,返回響應)。
    • 支持協議:HTTP、AJP 等。
    • 常見配置:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
  1. Engine(引擎)
    • 處理 Connector 傳入的請求。
    • 屬于 Service 內部組件。
    • 包含 Host 容器。
  2. Host(虛擬主機)
    • 每個 Host 表示一個虛擬主機。
    • 一個 Host 包含多個 Web 應用(Context)。
  3. Context(上下文)
    • 表示一個 Web 應用,通常對應 webapps 下的一個目錄。
    • 每個 Context 對應一個 web.xml 文件。

Tomcat 的目錄結構

apache-tomcat-<version>/
├── bin/         # 啟動與關閉腳本(startup.sh / shutdown.bat)
├── conf/        # 配置文件(server.xml、web.xml 等)
├── lib/         # 所有 Tomcat 運行所需的 jar 包
├── logs/        # 日志文件
├── webapps/     # 默認 Web 應用部署目錄
├── work/        # Servlet/JSP 編譯后的臨時文件
├── temp/        # 臨時文件

Tomcat 的工作原理

  1. 啟動 Tomcat(執行 bin/startup.sh)
  2. 初始化配置(加載 server.xml)
  3. 創建 Connector,監聽端口(如 8080)
  4. 接收到 HTTP 請求后交給對應 Context
  5. Servlet 容器處理請求:
    • 查找對應 Servlet
    • 調用其 service() 方法
  6. 返回處理結果給客戶端

Tomcat 的配置文件

  1. conf / server.xml
    Tomcat 的主配置文件,管理服務、端口、連接器等。
  2. conf / web.xml
    默認 Web 應用的全局配置文件,比如 MIME 類型映射、默認歡迎頁、錯誤頁面等。
  3. conf / context.xml
    所有 Web 應用的共享 Context 配置。

Tomcat 與其他服務器對比

服務器類型是否支持 Java EE 完整規范特點
TomcatWeb服務器+Servlet容器輕量、高性能、易于部署
JettyServlet 容器模塊化、嵌入式應用多
GlassFishJava EE 應用服務器官方 Java EE 實現,重量級
WildFlyJava EE 應用服務器高性能企業級服務器

Tomcat 使用場景

  1. Java Web 開發與學習
  2. 輕量級 Web 應用部署
  3. 微服務架構中的 Servlet 容器嵌入
  4. 嵌入式服務器(可內嵌到 Spring Boot)

Tomcat 與 Spring Boot

Spring Boot 內置了 Tomcat,默認使用的是 org.apache.catalina.startup.Tomcat 啟動類,實現嵌入式部署:

@SpringBootApplication
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}

可以通過配置文件指定端口:

server:port: 8081

常見問題與優化

  1. 啟動慢 / 內存不足
    • 優化 JVM 參數(setenv.sh 或 catalina.sh)
    • 分析日志查找瓶頸
  2. 端口占用
    • 修改 server.xml 中
  3. Session 共享問題
    • 使用 Redis / 數據庫持久化 session
    • 或配置 Tomcat 集群
  4. JSP 編譯慢
    • 預編譯 JSP 或使用更高版本的 JDK

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

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

相關文章

Nginx參數proxy_set_header 與 add_header 核心區別

proxy_set_header 與 add_header 是 Nginx 中兩個用于操作 HTTP 頭部信息的指令&#xff0c;但作用方向和使用場景完全不同。以下是兩者的核心區別&#xff1a;核心區別概述特性proxy_set_headeradd_header作用方向? 請求頭&#xff08;Request Headers&#xff09; → 后端服…

若依框架-前端二次開發快速入門簡述

1.目錄如左圖所示&#xff0c;主要分為bin,build,node_modules,public,src幾個部分&#xff0c;我們從gitee上使用bash將項目克隆到本地后&#xff0c;進入項目目錄&#xff0c;并安裝好依賴后可以直接使用命令啟動服務&#xff0c;具體命令見README.md&#xff0c;安裝好依賴后…

day 41 類和方法

day 28 類是對屬性和方法的封裝&#xff0c;可以理解為模版&#xff0c;通過對模型實例化可以實現調用這個類的屬性和方法。比如創建一個隨機森林類&#xff0c;然后就可以調用它的訓練和預測方法。 一個常見的類的定義包括了&#xff1a; 1、關鍵字class 2、類名 3、語法固定…

Docker學習日志-Docker容器配置、Nginx 配置與文件映射

Docker學習日志-Docker容器配置、Nginx 配置與文件映射 docker run 之后能否再次修改卷映射或端口映射&#xff1f; 不能直接修改已創建容器的卷映射或端口映射。 Docker 的設計原則是 **容器是不可變的 **&#xff0c;也就是說&#xff1a; 一旦容器通過 docker run 創建完成&…

cpp實現音頻重采樣8k->16k及16k->8k

static int convert_8khz_to_16khz(void* dst_buf, void* src_buf, int src_size) {short* in static_cast<short*>(src_buf);short* out static_cast<short*>(dst_buf);int in_samples src_size / sizeof(short);// 邊界處理&#xff1a;前兩個樣本out[0] in[…

【機器學習】機器學習新手入門概述

目錄 一、機器學習概念 1.1基本概念 1.2 主要類型 1.2.1 監督學習&#xff08;Supervised Learning&#xff09; &#xff08;1&#xff09;基本介紹 &#xff08;2&#xff09;任務目標 &#xff08;3&#xff09;常見算法 &#xff08;4&#xff09;應用場景 1.2.2 無…

嵌入式硬件篇---ESP32穩壓板

制作 ESP32 穩壓板的核心目標是&#xff1a;給 ESP32 提供穩定的 3.3V 電源&#xff08;ESP32 的工作電壓必須是 3.3V&#xff09;&#xff0c;同時支持多種供電方式&#xff08;比如鋰電池、USB、外接電源&#xff09;&#xff0c;并具備保護功能&#xff08;防止過流、接反電…

sql server 刪除用戶時提示:數據庫主體在該數據庫中擁有 架構,無法刪除

sql server 刪除用戶時提示&#xff1a;數據庫主體在該數據庫中擁有 架構&#xff0c;無法刪除&#xff0c;怎么辦&#xff1f; 1、刪除用戶ncdb2、 數據庫主體在該數據庫中擁有 架構&#xff0c;無法刪除。3、查看該用戶擁有的架構4、找到該用戶擁有的這個架構&#xff0c;右鍵…

分類-鳶尾花分類

目錄 基本步驟 決策樹&#xff08;分類&#xff09; 導入鳶尾花數據集 賦值給x與y 劃分數據集 導入決策樹模型 實例化 訓練 ?編輯 導入計算準確率的庫 計算準確率 隨機森林&#xff08;分類&#xff09; 導入鳶尾花的數據集&#xff0c; 賦值x&#xff0c;y 取后一…

單元測試、系統測試、集成測試知識詳解

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 一、單元測試的概念單元測試是對軟件基本組成單元進行的測試&#xff0c;如函數或一個類的方法。當然這里的基本單元不僅僅指的是一個函數或者方法&#xff0c;有可…

Python初學OpenCV:圖像預處理進階指南(二)

——實戰技巧與創新應用 > 圖像預處理是計算機視覺的"基石",掌握它等于獲得了讓機器"看懂世界"的魔法棒。 在上一篇教程中,我們學習了OpenCV的基礎預處理操作。本篇將帶你進入圖像預處理的進階世界,通過**實戰案例+創新應用**,教你如何組合多種技…

UML類圖--基于大話設計模式

類 一般矩形框代表類&#xff0c;類圖分為三層&#xff0c;第一層顯示類的名稱&#xff0c;如果是抽象類&#xff0c;則就用斜體顯示&#xff0c;如果是接口&#xff0c;則使用<<interface>>&#xff1b;第二層是類的特性&#xff0c;通常就是字段和屬性&#xff1…

數據結構 ArrayList與順序表

本節目標&#xff1a;了解線性表和順序表能夠實現簡單的順序表及其基本操作認識 ArrayList類并且知道如何去使用本篇文章正式進入數據結構&#xff01;進入之前&#xff0c;先了解一下什么是線性表和順序表。1.線性表與順序表線性表線性表&#xff08; linear list &#xff09…

佳維視工業顯示器在除塵與過濾設備中的應用

工業顯示器憑借高可靠性、防護性能、高顯示質量及多功能性&#xff0c;在除塵與過濾設備中扮演著關鍵角色&#xff0c;其應用貫穿設備監控、數據管理、故障診斷及遠程維護全流程&#xff0c;顯著提升了設備的運行效率、穩定性和智能化水平。以下是具體應用場景及優勢分析&#…

svn與git Merge重要區別講解

SVN有哪些merge方式 總的來說&#xff0c;SVN 的 merge 主要有以下 五種類型&#xff1a;1. 同步合并 (Sync Merge) / 追趕合并 (Catch-up Merge) 這是在分支開發過程中最常用的一種合并。目的&#xff1a;讓你的功能分支保持最新&#xff0c;及時獲取主干&#xff08;trunk&am…

Vue 3 入門教程5 - 生命周期鉤子

一、生命周期概述Vue 組件從創建到銷毀的整個過程稱為生命周期&#xff0c;在這個過程中&#xff0c;Vue 會自動觸發一系列的函數&#xff0c;這些函數被稱為生命周期鉤子。通過生命周期鉤子&#xff0c;我們可以在組件的不同階段執行特定的操作&#xff0c;例如初始化數據、發…

負載均衡Haproxy

簡介 HAProxy是一款高性能、開源的負載均衡器與反向代理服務器&#xff0c;主要用于 HTTP、TCP等協議的流量分發&#xff0c;廣泛應用于高并發、高可用的網絡架構中 HAProxy是法國威利塔羅&#xff08;Willy Tarreau&#xff09;使用C語言開發的一個開源軟件 企業版&#xff1a…

PostgreSQL鎖機制詳解:從并發控制到死鎖檢測

PostgreSQL鎖詳解 ————向逍xiangxiaohighgo.com 首先要講鎖的話&#xff0c;必須得先了解并發控制。數據庫中的對象都是共享的&#xff0c;如果同時間不同的用戶對同一個對象進行修改&#xff0c;就會出現數據不一致的情況。所以如果要實現并發訪問&#xff0c;就需要對這…

【啟發式算法】RRT*算法詳細介紹(Python)

&#x1f4e2;本篇文章是博主人工智能&#xff08;AI&#xff09;領域學習時&#xff0c;用于個人學習、研究或者欣賞使用&#xff0c;并基于博主對相關等領域的一些理解而記錄的學習摘錄和筆記&#xff0c;若有不當和侵權之處&#xff0c;指出后將會立即改正&#xff0c;還望諒…

Docker架構深度解析:從核心概念到企業級實踐

Docker架構深度解析&#xff1a;從核心概念到企業級實踐一、Docker架構全景圖1.1 整體架構示意圖二、核心組件深度解析2.1 Docker Daemon工作機制三、鏡像與容器原理3.1 鏡像分層結構3.2 容器生命周期四、網絡架構詳解4.1 網絡模式對比4.2 Bridge網絡實現原理五、存儲架構與實踐…