2.1 环境准备与安装启动全流程 本节摘要:本节完成漫游前的装备检查——核对 JDK 与 Tomcat 版本的匹配关系,解压安装并区分 CATALINAHOME 与 CATALINABASE,逐层认全七个目录的职责,完成首次启动与验证,并学会用启动日志确认装配结果。Linux 与 Windows 两条路径都会给出命令会话,装完即可进入后续所有章节的实验。 承接第 1 章的版本地图:版本线已经选定(本册实验以 9 与 10.1 双线为准),现在把它装成一个能反复折腾的实例。这一节的产出是"一个可实验的环境",第 2 章之后的所有操作都基于它。 先对齐三个数字 装 Tomcat 出的问题,八成出在没对齐数字上。哪三个?
本节摘要:本节完成漫游前的装备检查——核对 JDK 与 Tomcat 版本的匹配关系,解压安装并区分 CATALINA_HOME 与 CATALINA_BASE,逐层认全七个目录的职责,完成首次启动与验证,并学会用启动日志确认装配结果。Linux 与 Windows 两条路径都会给出命令会话,装完即可进入后续所有章节的实验。
承接第 1 章的版本地图:版本线已经选定(本册实验以 9 与 10.1 双线为准),现在把它装成一个能反复折腾的实例。这一节的产出是"一个可实验的环境",第 2 章之后的所有操作都基于它。
装 Tomcat 出的问题,八成出在没对齐数字上。哪三个?JDK 主版本、Tomcat 版本线的 Java 下限、你要部署的应用依赖的规范级别。按 1.3 的锁定表:跑 9 只需 Java 8 及以上,跑 10.1 需要 Java 11 及以上,跑 11 需要 Java 17 及以上。先用一条命令看清现状。
# 查看当前 JDK 版本 发行版与位数 java -version
openjdk version "17.0.10" 2024-01-16 OpenJDK Runtime Environment (build 17.0.10+7) OpenJDK 64-Bit Server VM (build 17.0.10+7, mixed mode)
看到 17,9、10.1、11 三条线都能跑;看到 8,就停在 9,别硬上 10.1——启动脚本会在早期就拒绝并提示版本不满足。另外确认两点:位数要统一(32 位 JDK 配 64 位 Tomcat 原生库会失败),生产上建议直接用发行版自带的解压包而非系统仓库版本,版本可控、目录干净。
从 Apache 官方下载页取 core 下的 tar 包或 zip 包,校验和文件一并下载核对。解压即安装——Tomcat 是绿色的,没有安装器,也没有注册表。
# 解压到约定目录并进入 tar -xzf apache-tomcat-10.1.26.tar.gz -C /opt/ cd /opt/apache-tomcat-10.1.26 ls -F
bin/ conf/ lib/ logs/ LICENSE NOTICE RELEASE-NOTES RUNNING.txt temp/ webapps/ work/
七个目录,各有各的脾气,认全它们后面章节才不迷路:
| 目录 | 职责 | 与管道的对应 |
|---|---|---|
| bin | 启动停止脚本与脚本级环境变量 | 管道的总闸 |
| conf | 全部配置文件,2.2 的主角 | 管道设计图 |
| lib | 容器与共享库,应用都可加载 | 管道的公共工具间 |
| logs | 运行日志与访问日志 | 第 7 章排障的证据库 |
| temp | JVM 临时文件目录 | 易被忽略的磁盘占用户 |
| webapps | 默认应用部署目录 | 第 4 章部署的主战场 |
| work | JSP 编译产物与会话暂存 | 第 6 章 Jasper 的车间 |
⚠️ 常见坑:work 目录会随 JSP 数量与会话量增长,磁盘告警时它和 logs 是前两名嫌疑。清空 work 是安全的——代价只是 JSP 重新编译一遍,这正是 1.1 说过的"首访慢"。
还有一对概念要分清:CATALINA_HOME 指向安装本体(脚本与库),CATALINA_BASE 指向运行实例(配置、日志、部署的应用)。两者可以分离——一份本体带多个实例,端口与配置各不相同,这是单机多实例的标准玩法,第 7 章的集群实验会用到。
Linux 下起步。先设好 JAVA_HOME 与 CATALINA_HOME,再执行启动脚本。
# 写一个环境脚本 便于反复实验 cat > /opt/tomcat-env.sh <<'EOF' export JAVA_HOME=/usr/lib/jvm/java-17-openjdk export CATALINA_HOME=/opt/apache-tomcat-10.1.26 export CATALINA_BASE=$CATALINA_HOME EOF source /opt/tomcat-env.sh $CATALINA_HOME/bin/startup.sh
Using CATALINA_BASE: /opt/apache-tomcat-10.1.26 Using CATALINA_HOME: /opt/apache-tomcat-10.1.26 Using CATALINA_TMPDIR: /opt/apache-tomcat-10.1.26/temp Using JRE_HOME: /usr/lib/jvm/java-17-openjdk Tomcat started.
"Tomcat started." 只代表主进程起来了,不代表管道装配无误。验证要过两关。第一关,进程与端口。
# 确认进程存在 并查看监听端口 ps -ef | grep catalina | grep -v grep ss -tlnp | grep 8080
root 15230 1 12 14:02 pts/0 java ... org.apache.catalina.startup.Bootstrap start LISTEN 0 100 0.0.0.0:8080 users:(("java",pid=15230,fd=40))
第二关,日志里的启动完成标记与部署清单。打开 logs 目录下的 catalina.out(或当日 catalina 日志),找两样东西:Server startup in 多少毫秒,以及每个应用的部署记录。看到部署了 ROOT、docs、examples、manager、host-manager 五个默认应用,即装配完整。
tail -n 6 /opt/apache-tomcat-10.1.26/logs/catalina.out
21-Aug-2026 14:02:31.115 信息 [main] org.apache.catalina.startup.Catalina.start Server startup in [1834] milliseconds
Windows 的路径不同,套路相同:设置 JAVA_HOME 环境变量后,在开始菜单搜 cmd 进入命令行,切到解压目录执行 bin 目录下的启动批处理;控制台窗口会持续输出日志,不要关闭。停止用同目录的关闭批处理,或直接对窗口按 Ctrl+C。
新环境最常见的第一故障是启动即退,日志末尾出现 BindException 字样——8080 被占。处置顺序:先查谁占的(lsof 或 netstat 按端口找进程),再决定杀掉占用者还是改自己的端口。前者是别人的服务要谨慎,后者一行配置:conf 目录的 server.xml 里把 Connector 的 port 改为 8081,重启即生效。这个小小的预演就是第 7 章排障方法论的缩影:从日志末尾的异常往上读,定位到管道的某一站,再动配置。
装备就位,下一节拆图纸——server.xml 从外到内五层嵌套,把 conf 目录六份文件的管辖范围一次划清。