目录

  • 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网络实现原理五、存储架构与实践…