一、Tomcat 基础概述
1、作用
Tomcat Tomcat(全称 Apache Tomcat)是 Apache 基金会开发的一款开源的 Web 服务器和 Servlet 容器,主要用于运行 Java 编写的 Web 应用程序,是 Java Web 开发中最常用的服务器之一。
- 作为 Java Web 应用运行平台,解析并执行 Servlet、JSP 等动态资源
- 提供 HTTP 服务能力,可直接处理静态资源请求
- 支持多种 Java EE 规范,如 Servlet、JSP、WebSocket 等
- 实现请求分发、会话管理、安全控制等核心 Web 服务功能
- 可与 Apache、Nginx 等 Web 服务器配合,构建高性能 Web 架构
2、应用服务器(Application Server)
// 用于部署、运行和管理基于 Java EE(现 Jakarta EE)规范的企业级应用程序
产品名称 | 归属公司 / 组织 | 开源 / 收费 | 支持的 Java EE 规范程度 | 核心特点 |
---|---|---|---|---|
Tomcat | Apache 基金会 | 开源免费 | 仅支持基础 Web 规范(Servlet、JSP、WebSocket 等),不支持 EJB、JMS 等企业级规范 | 轻量、资源占用低、部署简单,社区活跃,是 Java Web 开发的基础工具 |
WebLogic | Oracle | 商业收费 | 支持完整 Java EE(Jakarta EE)规范 | 功能全面,支持高可用集群、分布式事务、安全管理,提供企业级技术支持 |
WebSphere | IBM | 商业收费 | 支持完整 Java EE(Jakarta EE)规范 | 稳定性极强,集成 IBM 生态工具,支持跨平台部署和大规模集群 |
TongWeb(东方通) | 东方通科技 | 商业收费(国产化) | 支持完整 Java EE 规范,兼容国产化芯片和操作系统 | 国产化替代主力产品,通过等保认证,适配麒麟、欧拉等国产操作系统和鲲鹏芯片 |
Apusic(金蝶) | 金蝶软件 | 商业收费 | 支持完整 Java EE 规范,兼容主流 Java 框架 | 与金蝶 ERP 等企业软件深度集成,支持微服务架构,适合业务流程复杂的企业应用 |
InforSuite(中创软件) | 中创软件 | 商业收费 | 支持完整 Java EE 规范,强调分布式架构 | 专注于大型分布式应用,支持跨数据中心部署,在金融、交通行业有成熟解决方案 |
BES Application Server(宝兰德) | 宝兰德科技 | 商业收费(国产化) | 支持 Java EE 核心规范,适配国产化生态 | 轻量与企业级功能平衡,通过国产化认证,适合混合云部署 |
二、Tomcat 安装教程
1、安装 JDK
Tomcat 运行依赖 Java 环境,需安装 JDK 8 及以上版本
tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/
// 目前,绝大多数新开发项目和云原生应用已全面转向 JDK 17
tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/ //解压到指定目录
vim /etc/profile //配置环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_91 # 指定JDK 8的安装路径
export JAVA_OPTS="-Xms256m -Xmx512m" # JVM运行参数(初始堆内存256M,最大堆内存512M)
export PATH=$PATH:$JAVA_HOME/bin # 将JDK的bin目录添加到系统PATH(可直接使用java、javac等命令)
验证:java -version
显示版本信息即成功
使用 Amazon Corretto 17 的 yum 源(推荐)
步骤 1:添加 Corretto 的 yum 源
# 下载Corretto 17的repo文件(适用于RHEL/CentOS 7)
wget -O /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo
步骤 2:安装 Corretto 17 开发版(包含 javac 等工具)
# 清除yum缓存并更新
yum clean all && yum makecache fast
# 安装JDK 17开发版
yum install -y java-17-amazon-corretto-devel
步骤 3:验证安装
java -version # 应显示类似 "openjdk version "17.0.10" 2024-01-16 LTS"
javac -version # 开发版会显示javac版本,确认安装成功
2、 安装 Tomcat
Tomcat 官方下载地址:Apache Tomcat® - Welcome!
(需与开发发版本兼容)
- Binary Distributions(二进制发行版)
- 根据系统选择对应的安装包(Linux 选 tar.gz,Windows 选 zip)
- Source Code Distributions(源代码发行版)需编译后使用。
//注意:Tomcat 的源代码(Source Code)版本不能直接用 make && make install 编译安装,因为 Tomcat 是基于 Java 开发的项目,其构建工具与 C/C++ 项目(依赖 make)不同,主要使用 Ant 或 Maven 进行编译构建。
(1)下载 Tomcat 压缩包(如 apache-tomcat-9.0.80.tar.gz
(2)解压到指定目录:
tar -zxvf apache-tomcat-9.0.80.tar.gz -C /usr/local/
# 重命名便于管理
mv /usr/local/apache-tomcat-9.0.80 /usr/local/tomcat
4、 启动 Tomcat
- # vim /etc/profile
export CATALINA_HOME=/usr/local/tomcat # 指定Tomcat的安装路径(Tomcat依赖Java环境)
- # source /etc/profile
- # /usr/local/tomcat/bin/catalina.sh start //临时开启
- # vim /etc/rc.d/rc.local //开机自启
export JAVA_HOME=/usr/local/jdk1.8.0_91
export PATH=$PATH:$JAVA_HOME/bin
/usr/local/tomcat/bin/catalina.sh start
验证启动成功:打开浏览器访问 http://localhost:8080
,看到 Tomcat 欢迎页即成功
三、Tomcat 相关文件
Tomcat 目录结构及核心文件说明:
- bin/:存放启动 / 关闭脚本
- conf/:配置文件目录
- server.xml:Tomcat 最核心的配置文件,定义服务器的 “骨架”。
- web.xml:Web 应用的 “全局默认配置”,所有部署在 Tomcat 中的 Web 应用都会继承此配置。
- tomcat-users.xml:Tomcat 管理界面的用户权限配置文件。
- webapps/:Web 应用部署目录。存放 Web 应用的目录或 WAR 包,Tomcat 启动时会自动部署该目录下的应用。
- 直接将应用目录(如 myapp/)复制到 webapps/。
- 将应用打包为 myapp.war,放入 webapps/,Tomcat 会自动解压部署。
- logs/:日志文件目录
- catalina.out:最关键的日志文件,记录 Tomcat 启动过程、JVM 信息、应用初始化日志、运行时错误等。
- localhost_access_log.YYYY-MM-DD.txt:访问日志,记录所有客户端请求的详细信息:
- lib/:存放 Tomcat 运行必需的 Java 类库(.jar),所有 Web 应用可共享这些 jar 包
- work/:JSP 编译后的 class 文件目录
- temp/:临时文件目录
Tomcat 配置文件 server.xml
server.xml 是 Tomcat 核心配置文件,位于 conf 目录下,主要配置项说明:
<!-- 服务器根元素,port为关闭端口,用于接收关闭命令的内部端口 -->
<Server port="8005" shutdown="SHUTDOWN">
<!-- 服务组件 -->
<Service name="Catalina">
<!-- HTTP连接器,处理HTTP请求
port="8080":HTTP 服务端口,客户端通过此端口访问 Tomcat 应用。 -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- AJP连接器,与其他Web服务器通信
8009:
8443:HTTPS 协议的默认重定向端口,主要用于实现 “HTTP 到 HTTPS 的自动跳转”-->
<!--提供AJP协议的端口-->
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443"
maxParameterCount="1000"
/>
<!-- 引擎组件,处理所有请求 -->
<Engine name="Catalina" defaultHost="localhost">
<!-- 虚拟主机配置
appBase :项目目录-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- 上下文配置,指定Web应用 -->
<Context path="/myapp" docBase="/path/to/myapp" reloadable="true"/>
<!--定义访问日志位置、格式-->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%{x-real-ip}i %l %u %t "%r" %s %b %{Referer}i %{User_Agent}"/>
<!--定义tomcat线程池-->
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="300" minSpareThreads="8"/>
<!--maxThreads=: 最大线程数
minSpareThreads=: 最少的空闲线程数量 -->
</Host>
</Engine>
</Service>
</Server>
主要配置项说明:
Connector
:配置端口、协议、超时时间等Host
:配置虚拟主机,appBase
为应用部署目录Context
:配置单个 Web 应用,path
为访问路径,docBase
为应用实际路径
四、从代码开发到应用部署到 Tomcat 的完整流程
1、开发人员本地开发 & 提交代码
开发人员在本地通过 IDE(如 IDEA、Eclipse)编写 Web 应用代码(Java 类、JSP、配置文件等),代码结构需符合 Maven 规范(如src/main/java、src/main/webapp等目录)。
本地开发完成后,通过 Git 进行版本控制:
C:\Users\86150>D:
D:\ops生活\tools\device>git config --global user.name "su_win"
D:\ops生活\tools\device>git config --global user.email "su_win_email@example.com"
D:\ops生活\tools\device>git init
D:\ops生活\tools\device>git status
01-SSM.iml
device.sql
pom.xml
src/
D:\ops生活\tools\device>git add ./*
D:\ops生活\tools\device>git commit -m "第一次提交:添加了首页文件"
D:\ops生活\tools\device>git remote add origin https://gitee.com/Su_Sylvia/tomcat_test.git
D:\ops生活\tools\device>git push -u origin master
2、从 Git 服务器获取代码
yum install git -y
在构建服务器(或直接在目标 Tomcat 服务器)上,通过 git clone 拉取最新代码(通常用于构建环境,避免在生产服务器直接操作代码):
# 克隆代码到本地目录
git clone https://git服务器地址/项目仓库.git
# 若已有仓库,拉取最新更新
git pull origin 分支名
[root@sylvia-host-0 ~] git config --global user.name '松间听雪'
[root@sylvia-host-0 ~] git config --global user.email '16200949+su_sylvia@user.noreply.gitee.com'
[root@sylvia-host-0 ~] git clone https://gitee.com/Su_Sylvia/tomcat_test.git
[root@sylvia-host-0 ~] ls | grep tomcat_test
# tomcat_test
[root@sylvia-host-0 ~] mv tomcat_test /date/device
3、部署项目运行环境
1、安装项目所需数据库(MySQL、PostgreSQL 等)
#批量卸载系统中已安装的 MySQL 8.x/5.x 相关 RPM 包
rpm -qa | grep mysql | awk -F-8 '{print "rpm -e --nodeps", $1}' | bash
rpm -qa | grep mysql | awk -F-5 '{print "rpm -e --nodeps", $1}' | bash
rm -rf /var/lib/mysql # 数据库数据目录
rm -f /etc/my.cnf # 配置文件
rm -rf /etc/my.cnf.d # 配置文件目录
yum clean all # 清理 yum 缓存的软件包列表和元数据;
rm -rf /var/cache/yum/ # 手动删除 /var/cache/yum/ 目录是彻底清理残留的缓存文件,避免旧的冲突配置影响后续操作(确保 yum 使用最新的仓库信息)。
rpm -ivh https://repo.mysql.com/mysql57-community-release-el7.rpm # 重新安装 MySQL 官方仓库
vim /etc/yum.repos.d/mysql-community.repo # 确保你需要的 MySQL 版本(比如 5.7)对应的仓库被启用(enabled=1),而其他版本(比如 8.0)被禁用(enabled=0),避免 yum 默认安装其他版本。
yum repolist enabled | grep mysql # 验证仓库是否生效,输出应包含"mysql57-community"
yum install -y mysql-community-server mysql-community-client mysql-community-libs
# mysql-community-server:MySQL 服务端(核心程序)
# mysql-community-client:客户端工具(如 mysql 命令)
# mysql-community-libs:依赖库(解决 postfix 等软件的 libmysqlclient.so.18 缺失问题)
systemctl start mysqld # 启动服务
systemctl enable mysqld # 开机自启
systemctl status mysqld # 检查状态(应显示"active (running)")
遇见的问题:
(1)yum install mysql-community ,系统提示mysql57-community-release和mysql-community-release冲突。原因:系统中已经存在旧的 / 重复的 MySQL 仓库配置包(mysql57-community-release-el7-11.noarch),与要安装的包冲突,导致无法继续。
解决措施:rpm -e --nodeps mysql57-community-release-el7-11.noarch
2、创建项目数据库并导入初始数据
[root@sylvia-host-0 ~] scp -P 55555 /date/device/device.sql root@192.168.140.20:/usr/local
[root@sylvia-host-0 ~] rm /date/device/device.sql
[root@na-host-2 ~] grep 'temporary password' /var/log/mysqld.log
# 2025-09-10T02:43:44.728774Z 1 [Note] A temporary password is generated for root@localhost: d_r0dk-=Dfht
[root@na-host-2 ~] mysql -uroot -p'd_r0dk-=Dfht'
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Su@548165';
mysql> FLUSH PRIVILEGES;
mysql> create user 'device'@'%' identified by 'Device@548165';
mysql> grant all on device.* to 'device'@'%';
mysql> FLUSH PRIVILEGES;
[root@na-host-2 ~] mysql -uroot -pSu@548165 < /usr/local/device.sql
# mysql: [Warning] Using a password on the command line interface can be insecure.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| device |
| mysql |
| performance_schema |
| sys |
+--------------------+
mysql> use device;
mysql> show tables;
+------------------+
| Tables_in_device |
+------------------+
| addfacility |
| admin |
| delivery |
| facility |
| inform |
| repairs |
| user |
+------------------+
mysql> select * from user;
+-----+----------+-----------+------+
| uid | uname | upassword | rols |
+-----+----------+-----------+------+
| 1 | admin | admin | 1 |
| 2 | weixiu | weixiu | 2 |
| 3 | laoshi | laoshi | 3 |
| 4 | xuesheng | xuesheng | 4 |
+-----+----------+-----------+------+
3、配置项目连接信息(数据库地址、账号密码等)
[root@sylvia-host-0 ~] vim /date/device/src/main/resources/jdbc.properties
jdbc.drivers=com.mysql.jdbc.Driver
jdbc.urls=jdbc:mysql://192.168.140.20:3306/device #数据库
jdbc.usernames=device #用户名
jdbc.passwords=Device@548165
4、安装 Maven 编译工具
下载并解压:Download Apache Maven – Maven
[root@sylvia-host-0 ~] tar xf apache-maven-3.6.3-bin.tar.gz -C /usr/local
[root@sylvia-host-0 ~] mv /usr/local/apache-maven-3.6.3/ /usr/local/maven36
# 配置环境变量:
[root@sylvia-host-0 ~] vim /etc/profile
export MAVEN_HOME=/usr/local/maven36
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
[root@sylvia-host-0 ~] source /etc/profile
[root@sylvia-host-0 ~] mvn -v
# Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
# Maven home: /usr/local/maven36
# Java version: 1.8.0_91, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0_91/jre#3
# Default locale: zh_CN, platform encoding: UTF-8
# OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
[root@localhost ~] ls -l $(which java)
# lrwxrwxrwx 1 root root 22 9月 10 16:16 /usr/bin/java -> /etc/alternatives/java
[root@localhost ~] ls -l /etc/alternatives/java
# lrwxrwxrwx 1 root root 39 9月 10 16:16 /etc/alternatives/java -> /usr/lib/jvm/jdk-17-oracle-x64/bin/java
5、用 Maven 编译打包生成 WAR 文件
进入代码目录,执行 Maven 命令进行编译、打包(需提前在构建服务器安装 Maven 并配置MAVEN_HOME
):
[root@sylvia-host-0 device] cd /date/device/
[root@sylvia-host-0 device] mvn package
Maven 会根据项目根目录的pom.xml配置(如packaging=war),在target/目录下生成项目名.war文件(WAR 是 Web 应用的标准打包格式,包含所有类、资源、配置和 Web 页面)。
编译成功后,会在项目的 target 目录下生成 war 包
6、修改 Maven 仓库地址
vim /usr/local/maven36/conf/settings.xml
# 添加下列代码
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
7、部署 WAR 文件到 Tomcat 服务器
# 本地复制(若在同一服务器)
cp target/项目名.war /usr/local/tomcat/webapps/
# 远程复制(若跨服务器,用scp)
scp target/项目名.war 用户名@服务器IP:/usr/local/tomcat/webapps/
[root@sylvia-host-0 device] ls /date/device/target/
# 20220106ssmpm classes maven-archiver
# 20220106ssmpm.war generated-sources maven-status
[root@sylvia-host-0 device] mv /date/device/target/20220106ssmpm.war /date/device/target/device.war
[root@sylvia-host-0 device] cp /date/device/target/device.war /usr/local/tomcat/webapps/
启动(或重启)Tomcat 后,Tomcat 会自动解压项目名 .war 为项目名/目录,并部署应用,通过 http://服务器IP:端口/项目名 即可访问。
vim /usr/local/tomcat/conf/server.xml
<Context path="/" docBase="device" /> # <Context> 标签需要添加到 <Host> 标签内部
# 若 path="/",则访问路径为 http://localhost:8080/
# 若 path="/ab",则访问路径为 http://localhost:8080/ab
# device为 Web 应用的代码在服务器上的实际存放目录。
/usr/local/tomcat/bin/catalina.sh stop
/usr/local/tomcat/bin/catalina.sh start