一、Tomcat 简介
Tomcat(全称为Apache Tomcat)是一个开源的、轻量级的应用服务器,由 Apache 软件基金会开发和维护,它实现了 Java Servlet、Java Server Pages(JSP)和 Java Expression Language(简称JEXL java表达式语言)等 Java EE 规范,并提供了一个运行这些 Web 应用程序的环境。在使用Tomcat 时,将 Java Web 应用程序(包括Servlet、JSP等文件)部署到 Tomcat 服务器中,然后通过 HTTP 协议访问这些应用程序,Tomcat提供了一个简单而强大的方式来托管和运行Java Web应用程序。
二、Tomcat 特点
-
Servlet容器:Tomcat是一个Servlet容器,负责处理和执行Java Servlet。Servlet是一种用Java编写的服务器端程序,用于处理Web请求和生成动态Web内容;
-
JSP支持:Tomcat还支持JavaServer Pages(JSP),一种将Java代码嵌入HTML中的技术,用于创建动态Web页面;
-
轻量级:Tomcat被设计为轻量级的应用服务器,易于安装和配置。它专注于提供基本的Servlet和JSP支持,而不像一些其他应用服务器那样包含大量的附加功能;
-
开源:Tomcat是开源软件,可以免费使用,并且其源代码是开 放的,允许用户根据需要进行修改和定制;
-
连接器支持:Tomcat支持多种连接器,可以与不同的Web服务器进行集成。最常见的是与Apache HTTP服务器一起使用的AJP(Apache JServ Protocol)连接器;
-
管理工具:Tomcat提供了Web-based管理工具,允许管理员轻松地配置和监控Tomcat服务器。这包括一个Web界面,可以用来管理Web应用程序、虚拟主机、连接器等;
-
安全性:Tomcat内置了一些安全特性,包括对SSL/TLS的支持,以及一些安全的配置选项,帮助保护Web应用程序免受攻击;
-
跨平台性:Tomcat是跨平台的,可以在不同的操作系统上运行,包括Windows、Linux、和macOS等
三、Java环境部署
1、Rocky部署java环境
准备java环境,Tomcat10移除了对Java 8的支持,要求使用Java 9及以上版本。
yum install java-11-openjdk -y


检查效果
java --version

定制java环境变量
bash
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.25.0.9-7.el9.x86_64
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$JAVA_BIN:$PATH

加载环境变量
source /etc/profile.d/java.sh
2、Ubuntu部署java环境
准备java环境
apt install openjdk-17-jdk -y


检查效果
java --version

定制环境变量并加载
bash
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$JAVA_BIN:$PATH

四、Tomcat 源码部署
1、Rocky部署Tomcat10
获取软件
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.47/bin/apache-tomcat-10.1.47.tar.gz
解压文件
tar -zxvf apache-tomcat-10.1.47.tar.gz -C /data/server/
定制软链接
查看目录结构

配置tomcat环境变量并加载
bash
export CATALINA_BASE=/data/server/tomcat
export CATALINA_HOME=/data/server/tomcat
export CATALINA_TMPDIR=$CATALINA_HOME/temp
export CLASSPATH=$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcatjuli.jar
export PATH=$CATALINA_HOME/bin:$PATH

启动tomcat

查看端口

浏览器查看效果

2、Ubuntu部署Tomcat11
获取软件
wget https://dlcdn.apache.org/tomcat/tomcat-11/v11.0.4/bin/apache-tomcat-11.0.4.tar.gz
解压文件
tar -zxvf apache-tomcat-11.0.4.tar.gz -C /data/server/

配置软链接
ln -s /data/server/apache-tomcat-11.0.4 /data/server/tomcat
查看目录结构

定制环境变量
bash
export CATALINA_BASE=/data/server/tomcat
export CATALINA_HOME=/data/server/tomcat
export CATALINA_TMPDIR=$CATALINA_HOME/temp
export CLASSPATH=$CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcatjuli.jar
export PATH=$CATALINA_HOME/bin:$PATH

启动tomcat

查看端口

浏览器查看页面

五、定制 Tomcat 服务脚本
1、Rocky定制Tomcat服务脚本
停止tomcat服务
catalina.sh stop

定制专用服务用户
useradd -r -s /sbin/nologin tomcat

更改文件权限(因为是链接文件,所以,需要执行两条命令)
chown -R tomcat:tomcat /data/server/tomcat
chown -R tomcat:tomcat /data/server/tomcat/*

定制启动服务脚本
bash
[Unit]
Description=Tomcat
After=syslog.target network.target
[Service]
Type=forking
# Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.25.0.9-7.el9.x86_64
ExecStart=/data/server/tomcat/bin/startup.sh
ExecStop=/data/server/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
加载服务配置
systemctl daemon-reload
启动tomcat服务并查看状态
systemctl start tomcat
systemctl status tomcat

2、Ubuntu定制tomcat的服务脚本
停止tomcat服务
catalina.sh stop

定制专用服务用户

更改文件权限(因为是链接文件,所以,需要执行两条命令)
chown -R tomcat:tomcat /data/server/tomcat
chown -R tomcat:tomcat /data/server/tomcat/*

定制启动服务脚本
bash
[Unit]
Description=Tomcat
After=syslog.target network.target
[Service]
Type=forking
# Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
ExecStart=/data/server/tomcat/bin/startup.sh
ExecStop=/data/server/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target

加载服务配置
systemctl daemon-reload
启动tomcat服务,查看状态
systemctl start tomcat
systemctl status tomcat

六、Tomcat 目录结构
查看tomcat的工作目录结构

功能解读
-
bin # 管理脚本文件目录
-
conf # 配置文件目录
-
lib # 库文件目录
-
logs # 日志目录
-
temp # 临时文件目录
-
webapps # 应用程序目录
-
work # jsp编译后的结果文件,建议提前预热访问,升级应用后,删除此目录数据才能更新
查看tomcat启动脚本

功能解读
-
/data/server/tomcat/bin/catalina.sh # 真实生效的管理脚本
-
/data/server/tomcat/bin/shutdown.sh # 停止tomcat服本
-
/data/server/tomcat/bin/startup.sh # 启动tomcat脚本
-
/data/server/tomcat/bin/version.sh # 输出版本信息
七、Tomcat 组件
Tomcat 作为 Java Web 容器,其核心功能依赖于一套层次化的组件体系,这些组件协同工作以接收、处理和响应客户端请求。核心组件包括 Connector(连接器)、Engine(引擎)、Host(主机)、Context(上下文),它们遵循 "层级包含" 关系:Server → Service → (Connector + Engine) → Host → Context,并通过 Service 组件与外部交互。
组件说明
组件 | 说明 |
---|---|
Server | 服务器,Tomcat 运行的进程实例,一个 Server 中可以有多个 service,但通常就一个 |
Service | 服务,用来组织 Engine 和 Connector 的对应关系,一个 service 中只有一个 Engine |
Connector | 连接器,负责客户端的 HTTP、HTTPS、AJP 等协议连接,与客户端直接通信,接收请求并转发给容器(Engine),同时将容器的响应返回给客户端。一个 Service 可以包含多个 Connector,所有 Connector 共享同一个 Engine |
Engine | 引擎,Tomcat 中最顶层的容器组件,负责管理多个 Host,用来响应并处理用户请求。一个 Engine 上可以绑定多个 Connector |
Host | 虚拟主机,通常关联一个或多个域名,负责管理该域名下的所有 Web 应用。可以实现多虚拟主机,例如使用不同的主机头区分 |
Context | 应用的上下文,对应一个具体的 Web 应用(如一个 WAR 包或一个解压后的 Web 目录),直接处理客户端请求。配置特定 url 路径映射和目录的映射关系:url => directory |
典型请求处理流程
-
客户端通过 HTTP 协议访问 http://www.example.com:8080/app1/login;
-
监听 8080 端口的 HTTP Connector 接收请求,解析出主机名 www.example.com 和路径 /app1;
-
Connector 将请求转发给 Engine;
-
Engine 根据主机名 www.example.com 找到对应的 Host;
-
Host 根据路径 /app1 找到对应的 Context;
-
Context 调用内部的 Servlet(如 LoginServlet)处理请求,生成响应;
-
响应按原路径返回给客户端。
八、Nginx 反向代理 Tomcat
1、核心原理
反向代理本质是 Nginx 作为 "中间层" 接收客户端请求,根据配置将请求转发给后端 Tomcat 处理,最终将 Tomcat 的响应返回给客户端。
架构流程
客户端 → Nginx(接收请求、静态资源处理)→ 转发动态请求到 Tomcat → Tomcat 处理动态业务(如 Servlet/JSP)→ Nginx → 客户端
2、优势
-
静态资源卸载:Nginx 处理静态资源(JS/CSS/ 图片)效率远高于 Tomcat,减少 Tomcat 非必要资源消耗;
-
负载均衡:多 Tomcat 集群场景下,Nginx 可均匀分配请求,避免单点过载;
-
端口统一:Nginx 监听 80/443 标准端口,Tomcat 隐藏在后端(如监听 8080),无需暴露非标准端口;
-
高可用:通过健康检查自动剔除故障 Tomcat,保证服务稳定性。
3、简单实践
在同一台服务器上部署 Nginx 和 Tomcat,Nginx 监听 80 端口,将请求转发至后端 Tomcat 的
8080 端口进行处理。
部署Tomcat并查看效果

定制nginx配置文件
bash
server{
listen 80;
server_name rocky.test.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header host $http_host;
}
# 将 .jsp 转发给 tomcat
location ~* .jsp$ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header host $http_host;
}
}

检测nginx配置并重启服务

添加主机名解析
bash
echo '10.0.0.15 rocky.test.com' >> /etc/hosts

访问测试
