一、Tomcat核心组件总结

Tomcat 是一款开源、轻量级的 Java Web 应用服务器,属于 Servlet 容器,主要用于运行 Java Web 项目(JSP、Servlet),也是目前企业最常用的 Web 容器之一。其核心架构采用分层组件化设计,各组件各司其职、协同工作,支撑 Web 项目的请求接收、处理、响应全流程。

1.1 核心顶层组件

1、Server(服务器)

Tomcat 的顶级核心组件,代表整个 Tomcat 服务实例,一个 Server 对应一个完整的 Tomcat 进程。主要作用是统一管理所有服务资源、生命周期,负责启动、初始化、关闭整个 Tomcat 服务,全局唯一。

2、Service(服务)

隶属于 Server,一个 Server 可包含多个 Service。核心作用是绑定连接器与容器,将接收请求的连接器和处理请求的容器组合起来,对外提供网络服务。默认 Tomcat 仅配置一个名为 Catalina 的 Service。

1.2 两大核心功能组件(Service 核心)

1、Connector(连接器)

负责接收客户端网络请求,是 Tomcat 的网络入口,不处理业务逻辑,只做请求转发。核心功能:监听端口、解析 HTTP 协议、封装请求/响应对象、将请求交给 Engine 处理。

常用配置:默认 8080 端口(HTTP 协议),支持 HTTPS、AJP 协议;支持 NIO、NIO2、APR 三种网络模型,默认 NIO 高性能模型。

2、Container(容器)

负责处理业务请求,执行 Servlet、JSP 逻辑,是真正运行 Web 项目的核心。容器采用四层嵌套结构,从上到下依次为:Engine、Host、Context、Wrapper。

1.3 容器四层嵌套结构

1、Engine(引擎)

Service 的顶级容器,一个 Service 对应一个 Engine。负责接收 Connector 转发的所有请求,统筹分发请求到对应的虚拟主机(Host),是请求处理的总调度中心。默认引擎名称为 Catalina。

2、Host(虚拟主机)

隶属于 Engine,一个 Engine 可配置多个 Host。对应域名/站点,实现一台服务器部署多个独立网站(多域名、多站点隔离)。默认配置 localhost 本地虚拟主机,默认站点根目录为 webapps。

3、Context(web 应用上下文)

隶属于 Host,一个 Host 可部署多个 Context。对应一个独立的 Web 项目,每个 Context 拥有独立的 ClassLoader、会话管理、配置信息,实现项目之间的资源隔离。项目部署的核心就是注册 Context 上下文。

4、Wrapper(包装器)

容器最小单元,隶属于 Context,一个 Wrapper 对应一个 Servlet。负责管理 Servlet 的实例创建、初始化、调用、销毁,是 Servlet 生命周期的直接管理者。

1.4 辅助核心组件

  • Listener(监听器):监听 Tomcat 服务、容器、请求的生命周期事件,触发初始化、销毁、异常处理等操作,如全局配置加载、日志监听。

  • Filter(过滤器):拦截 Web 请求,在 Servlet 执行前完成预处理(编码过滤、权限校验、参数过滤),不处理业务逻辑。

  • Manager(会话管理器):管理所有用户 Session 会话,负责会话创建、过期销毁、持久化。

  • Valve(阀门):Tomcat 内置的拦截机制,用于日志记录、访问权限控制、IP 拦截等全局站点拦截功能。

二、Tomcat 环境准备与安装部署文档

2.1 环境要求

Tomcat 依赖 JDK 环境,必须先安装配置 JDK,再安装 Tomcat,版本需匹配:

  • Tomcat9.x:适配 JDK8 及以上版本(主流企业版本)

  • Tomcat10.x:适配 JDK11 及以上版本

  • 系统环境:Windows / Linux(CentOS、Ubuntu)均可,本文以rocky10为例

2.2 前置准备:JDK 安装配置

1、检查系统是否自带 JDK,执行命令:java -version

2、若无 JDK,安装 JDK8:yum install java-1.8.0-openjdk-devel -y

Rocky Linux 10(基于RHEL10)官方默认 appstream  仓库已经不再预装、收录 OpenJDK 8,最低原生自带的JDK版本是OpenJDK21,所以找不到对应包名。

方案:使用Temurin(Adoptium)JDK8
 
官方源彻底移除OpenJDK8时,推荐这个通用兼容方案

安装JDK8开发版

3、验证安装:输入 java -version,显示版本信息即安装成功

4、配置环境变量(可选,系统自带可跳过),编辑配置文件 vi /etc/profile,添加 JDK 路径,执行 source /etc/profile 生效。

2.3 Tomcat 下载与安装

1、下载安装包

选择官方稳定版 Tomcat9,通过 wget 命令下载,或手动上传压缩包:

2、解压安装包

将压缩包解压到 /usr/local/ 目录(系统软件统一安装目录):


解压后重命名,方便管理:mv /usr/local/apache-tomcat-9.0.85 /usr/local/tomcat9

3、配置 Tomcat 环境变量

1、编辑全局环境变量文件:

2、文末添加以下配置:

3、生效配置:

2.4 Tomcat 启停与状态验证

1、启停命令

  • 启动服务:

  • 停止服务:

  • 查看日志:

2、访问验证

关闭防火墙,浏览器访问 服务器IP:8080,出现 Tomcat 默认欢迎页面即安装启动成功。

2.5 设置开机自启(可选)

1、创建 systemd 服务文件:vim /usr/lib/systemd/system/tomcat.service

2、写入服务配置,指定 JDK 路径、Tomcat 路径、启停指令

3、重载服务、设置开机自启:


三、Tomcat 目录结构与核心配置文件作用总结

3.1 Tomcat 核心目录作用

Tomcat 安装根目录下包含 7 个核心子目录,各司其职,是项目部署和运维的基础:

1、bin 目录(脚本目录)

存放 Tomcat 启停、运维脚本,核心可执行文件:

  • startup.sh / startup.bat:Linux/Windows 启动 Tomcat 脚本

  • shutdown.sh / shutdown.bat:停止 Tomcat 服务脚本

  • catalina.sh:核心启动脚本,加载 JVM 参数、服务配置

2、conf 目录(配置目录,核心)

存放所有全局、项目级配置文件,是运维修改最多的目录,下文详细说明核心配置文件。

3、webapps 目录(项目部署目录)

Tomcat 默认的 Web 项目部署根目录,所有 war 包、静态项目可直接放入此处自动部署。默认自带 5 个自带项目:

  • ROOT:默认根站点,访问 IP:8080 直接访问该项目

  • docs:Tomcat 官方文档

  • examples:官方示例项目

  • host-manager、manager:Tomcat 后台管理站点

4、logs 目录(日志目录)

存放 Tomcat 所有运行日志、访问日志、错误日志,排查问题核心目录:

  • catalina.out:全局运行日志,包含项目启动、报错、输出信息

  • access_log.log:客户端访问记录日志(请求IP、请求路径、响应状态码)

  • localhost.log、localhost_access_log:本地访问、异常日志

5、lib 目录(依赖库目录)

存放 Tomcat 运行所需的所有 jar 依赖包,以及全局公共依赖,所有部署的项目可共享该目录依赖。

6、temp 目录(临时文件目录)

存放 Tomcat 运行过程中产生的临时文件、缓存文件,可定期清理,不影响服务运行。

7、work 目录(编译缓存目录)

存放 JSP 文件编译后的 Servlet 源码和 class 字节码文件,是 JSP 动态编译的缓存目录。清理该目录可解决 JSP 缓存不更新问题。

3.2 核心配置文件作用(conf 目录)

1、server.xml(全局核心配置)

Tomcat 最核心配置文件,用于配置 Server、Service、Connector、Engine、Host 所有顶层组件,管控整个服务运行参数。

常用修改场景:修改端口、配置虚拟主机、配置连接池、开启 HTTPS、调整最大连接数。

核心配置项:8080 访问端口、最大线程数、超时时间、虚拟主机域名映射。

2、web.xml(全局项目默认配置)

全局默认 Web 应用配置,所有部署的项目都会继承该配置。

核心作用:配置默认欢迎页、全局错误页面、Session 超时时间、MIME 类型、过滤器、全局 Servlet。

项目内部的 web.xml 会覆盖全局配置,实现项目个性化配置。

3、context.xml(全局数据源配置)

全局数据源、连接池配置文件,所有项目共享该配置。常用于配置数据库连接池、JNDI 数据源、资源引用。

4、tomcat-users.xml(权限配置)

Tomcat 后台管理权限配置文件,默认无管理员账号。如需登录 manager 管理后台,需在此文件配置用户名、密码、角色权限。

5、catalina.properties(全局属性配置)

配置 Tomcat 全局运行参数、类加载规则、jar 包扫描规则、编码格式、缓存策略等底层参数。

四、Tomcat 部署 Halo 博客项目实操过程总结

4.1 项目简介

Halo 是一款轻量级、开源、现代化的 Java 博客系统,支持主题切换、插件扩展,部署简单,可通过 Tomcat 容器直接部署运行。本次为Tomcat 手动部署 Halo war 包完整流程。

4.2 部署前置条件

  • 已完成 JDK、Tomcat9 安装部署,服务可正常启动

  • 关闭防火墙

  • 获取官方稳定版 Halo 部署 war 包

4.3 详细部署步骤

1、下载 Halo 部署包

前往 Halo 官方下载稳定版 halo.war 部署包,通过 ftp 上传至服务器,或通过 wget 命令直接下载至服务器。

2、部署项目到 Tomcat

Tomcat 部署项目两种方式,本次采用标准部署方式:

1、停止 Tomcat 服务:shutdown.sh,避免部署冲突

2、进入 Tomcat 项目目录:cd /usr/local/tomcat9/webapps

3、删除默认自带项目(可选,精简环境):rm -rf docs examples host-manager manager

4、将 halo.war 上传至 webapps 目录,重命名为 ROOT.war(核心:替换默认根项目,实现直接通过 IP:8080 访问博客,无需项目名)

3、启动服务并解压部署

执行启动命令:startup.sh,Tomcat 会自动解压 ROOT.war 生成 ROOT 项目文件夹,完成项目部署。

通过 tail -f /usr/local/tomcat9/logs/catalina.out 查看启动日志,无报错、出现 Server startup in xxx ms 即启动成功。

4、初始化 Halo 博客

1、浏览器访问:服务器IP:8080,自动跳转 Halo 初始化页面

2、按照页面提示,设置管理员用户名、密码、博客名称

3、选择数据库(默认内置 H2 数据库,无需额外安装,适合轻量化部署)

4、提交配置,完成初始化,自动跳转博客前台首页

5、后台管理验证

访问 IP:8080/admin,输入初始化设置的账号密码,可进入后台,实现主题更换、文章发布、插件安装、站点配置等操作。

4.4 部署常见问题与解决方案

  • 端口占用启动失败:执行 netstat -lntp | grep 8080 查看占用进程,杀死进程或修改 Tomcat 端口

  • 项目访问404:检查 war 包是否重命名为 ROOT.war、是否解压成功、日志是否有报错

  • 启动卡顿超时:清理 work 缓存目录、检查服务器内存,重启 Tomcat 服务

  • 防火墙拦截访问:放行 8080 端口 firewall-cmd --permanent --add-port=8080/tcp,重载防火墙

4.5 部署总结

Halo 项目基于 Java 开发,完美适配 Tomcat 容器,核心部署逻辑为:依赖JDK环境→Tomcat服务启动→war包放置webapps目录→自动解压部署→初始化配置。将 war 包命名为 ROOT 是实现根路径访问的关键,也是 Tomcat 部署 Web 项目的通用技巧。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐