WD
Classnote Docs课程课件
04

04 Tomcat服务器详解

学习目标:

  • 理解 Tomcat 的定位,并说清它与浏览器、HTTP、Java Web 应用之间的关系
  • 掌握 Tomcat 的安装、目录结构、启动与停止流程
  • 掌握直接部署、虚拟映射、WAR 包部署三种常见发布方式
  • 理解 URL 与本地资源路径之间的映射关系
  • 能完成端口、ROOT 应用、欢迎页等基础配置,并处理常见故障

本章重点:

  • Tomcat 在 Java Web 体系中的职责
  • webappsconfbin 等核心目录的作用
  • 直接部署、虚拟映射、WAR 包部署的差异与适用场景
  • server.xmlROOT、欢迎页、端口配置等高频操作
01 / Section

前置知识准备

  • 已理解 HTTP 请求与响应的基本结构
  • 已具备基本命令行操作能力
  • 已安装 JDK,并知道如何配置 JAVA_HOME

如果你还不熟悉 JSON 和数据交换格式,请先补充学习扩展课《数据交换格式》;本章不再重复展开 JSON 细节,而是聚焦 Tomcat 本身。

02 / Section

一、Tomcat 在 Web 开发中的定位

1.1 什么是服务器

“服务器”通常有两层含义:

层面 说明 例子
软件层面 能把本地资源发布到网络中的程序 Tomcat、Nginx、Apache
硬件层面 运行这些服务程序的主机 云服务器、机房服务器、本地高性能机器

在当前课程语境中,我们重点讨论的是软件层面的服务器

1.2 什么是 Tomcat

Tomcat 是一个 Java Web 服务器,也可以理解为一个 Java Web 容器

它的核心职责是:

  • 接收浏览器发来的 HTTP 请求
  • 找到对应的静态资源或动态资源
  • 调用 Java Web 组件处理请求
  • 把结果再返回给浏览器

可以用下面这条链路理解:

text
浏览器 -> HTTP请求 -> Tomcat -> Web资源 / Servlet -> HTTP响应 -> 浏览器

1.3 静态资源和动态资源

类型 特点 例子
静态资源 内容通常固定,服务器直接读取并返回 HTML、CSS、JS、图片、字体
动态资源 需要服务器程序参与处理后再生成结果 Servlet、JSP、接口返回数据

Tomcat 既能发布静态资源,也能承载 Java Web 动态资源。

1.4 Tomcat 和 Java Web 的关系

Tomcat 不是普通文件服务器,它更重要的价值在于:

  • 能运行符合 Java Web 规范的程序
  • 能帮我们统一处理请求分发、资源发布、Web 应用加载等工作

在 Java Web 学习路径中,它的角色大致如下:

text
HTTP 协议 -> Tomcat -> Servlet -> Request/Response -> 会话技术 -> Web组件 -> MVC

也就是说,Tomcat 是后续 Servlet、过滤器、监听器等内容的运行基础。

03 / Section

二、Tomcat 的安装与目录结构

2.1 版本选择建议

版本 Servlet 规范 JDK 要求 适用场景
Tomcat 9 Servlet 4.0 JDK 8+ 稳定成熟,课程推荐
Tomcat 10 Servlet 5.0 JDK 11+ 新项目或升级项目
Tomcat 10.1 Servlet 6.0 JDK 11+ 追新特性时使用

如果你当前是 Java Web 入门阶段,优先选用 Tomcat 9 更稳妥。

2.2 安装步骤

1. 下载与解压

text
官网:https://tomcat.apache.org/
下载:apache-tomcat-9.0.x.zip
解压:D:\apache-tomcat-9.0.x

2. 路径命名要求

Tomcat 安装路径尽量避免:

  • 中文
  • 空格
  • 特殊符号

例如:

text
❌ C:\Program Files\Tomcat 9
❌ D:\服务器\Tomcat
✅ D:\apache-tomcat-9.0.80

2.3 环境变量

Tomcat 运行前,至少要保证 JDK 可用。

powershell
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_xxx

可选配置:

powershell
CATALINA_HOME=D:\apache-tomcat-9.0.80

其中:

  • JAVA_HOME 用来告诉 Tomcat 去哪里找 JDK
  • CATALINA_HOME 用来标识当前 Tomcat 的安装目录

2.4 核心目录结构

text
apache-tomcat-9.0.80/
├── bin/       # 启动、停止脚本
├── conf/      # 核心配置文件
├── lib/       # 依赖 jar 包
├── logs/      # 日志
├── temp/      # 临时文件
├── webapps/   # 默认部署目录
└── work/      # 运行时生成文件

重点目录说明:

目录 作用
bin/ startupshutdown 等脚本
conf/ server.xmlweb.xml 等配置
webapps/ 默认 Web 应用部署目录
logs/ 启动、运行过程中的日志输出
lib/ Tomcat 自带依赖库
04 / Section

三、Tomcat 的启动、停止与基础排错

3.1 启动方式

Windows

powershell
cd D:\apache-tomcat-9.0.80\bin
startup.bat

Linux / macOS

bash
cd /usr/local/tomcat/bin
./startup.sh

对新手来说,直接双击 startup.bat 也可以。

3.2 如何判断启动成功

默认访问地址:

text
http://localhost:8080

能看到 Tomcat 欢迎页,说明启动成功。

3.3 停止方式

方式 操作 说明
标准停止 shutdown.bat / shutdown.sh 推荐
控制台停止 在启动窗口按 Ctrl + C 方便但不够规范
强制结束 关闭进程 仅在异常情况下使用

3.4 常见问题排查

问题1:启动窗口一闪而过

通常原因是 JAVA_HOME 没配好。

可以先检查:

powershell
echo %JAVA_HOME%

如果为空,先修复环境变量,再重启 Tomcat。

问题2:8080 端口被占用

常见报错:

text
Address already in use: bind 0.0.0.0:8080

排查方式:

powershell
netstat -ano | findstr :8080
taskkill /PID 1234 /F

如果不想结束占用进程,也可以改 Tomcat 端口。

问题3:控制台中文乱码

Windows 控制台常见原因是编码不一致。

可以在 conf/logging.properties 中调整:

properties
java.util.logging.ConsoleHandler.encoding = GBK
05 / Section

四、Tomcat 部署 Web 应用的三种方式

4.1 三种部署方式总览

方式 优点 缺点 适用场景
直接部署 简单直接,适合入门 位置固定在 webapps 本地开发、演示
虚拟映射 灵活,项目目录可自定义 需要配置 开发机、多项目管理
WAR 包部署 方便分发,符合发布习惯 需要先打包 测试、上线发布

4.2 直接部署

基本思路

把应用文件夹直接放到 webapps 下。

diagram
webapps/ myapp/ index.html css/ js/ images/
webapps/
└── myapp/
    ├── index.html
    ├── css/
    ├── js/
    └── images/

访问方式:

text
http://localhost:8080/myapp/index.html

特点

  • 最容易理解
  • 最适合教学和本地验证
  • 但项目位置必须跟着 Tomcat 走

4.3 虚拟映射

适用场景

项目不想放到 webapps 中,但仍希望通过 Tomcat 访问。

推荐做法是在 conf/Catalina/localhost/ 下添加映射文件。

例如:

xml
<!-- 文件:conf/Catalina/localhost/user1.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:\my-projects\app1" />

此时:

text
http://localhost:8080/user1/index.html

会映射到:

text
D:\my-projects\app1\index.html

注意点

  • 文件名决定访问路径
  • docBase 必须指向目录,而不是单个文件
  • 这种方式通常比直接改 server.xml 更安全

4.4 WAR 包部署

WAR 本质上就是 Web 应用的标准压缩包。

打包后把它放进 webapps/,Tomcat 会自动解压并部署。

powershell
jar -cvf myapp.war .

部署后通常会看到:

text
webapps/
├── myapp.war
└── myapp/

这种方式更接近实际发布流程。

4.5 理解部署本质:URL 到本地路径的映射

部署问题的核心,实际上就是:

text
用户访问的 URL
        ↓
Tomcat 如何解析路径
        ↓
最终找到本地哪个资源

例如:

text
http://localhost:8080/myapp/index.html

直接部署时通常对应:

text
webapps/myapp/index.html

所以部署方式看起来不同,本质上都在解决同一个问题:访问路径如何映射到磁盘路径

06 / Section

五、Tomcat 的常见配置

5.1 修改端口

默认端口是 8080,配置位置在 conf/server.xml

xml
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

如果改成 80:

xml
<Connector port="80" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

访问时就可以省略端口:

text
http://localhost/

5.2 配置 ROOT 应用

ROOT 应用就是缺省应用。

方式1:直接部署 ROOT

text
webapps/ROOT/

方式2:配置 ROOT 虚拟映射

text
conf/Catalina/localhost/ROOT.xml

例如:

xml
<Context docBase="D:\test333" />

此时访问:

text
http://localhost:8080/

就会直接进入该应用,而不用再写应用名。

5.3 配置欢迎页

欢迎页用于控制“访问目录时默认打开哪个文件”。

配置位置通常在 conf/web.xml

xml
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

访问逻辑可以理解为:

text
访问 /myapp/
 -> 先找 index.html
 -> 再找 index.htm
 -> 再找 index.jsp
 -> 都没有则 404

5.4 一个完整配置场景

需求:通过 http://localhost/ 直接访问 D:\test333 中的资源。

可以分三步:

  1. 把端口改成 80
  2. 创建 ROOT.xml,把 docBase 指向 D:\test333
  3. 配置欢迎页,比如 1.html

这样浏览器访问根路径时,就能直接进入目标资源。

07 / Section

六、Tomcat 使用中的高频问题

6.1 中文资源名乱码

如果访问中文文件名资源时出现乱码或 404,可以在 Connector 中补:

xml
<Connector port="8080" protocol="HTTP/1.1"
           URIEncoding="UTF-8"
           connectionTimeout="20000"
           redirectPort="8443" />

6.2 虚拟映射配错路径

错误示例:

xml
<Context docBase="D:\app1\1.png" />

正确做法:

xml
<Context docBase="D:\app1" />

docBase 指向的是应用目录,不是某一个具体文件。

6.3 外部机器访问不到

常见原因有三个:

  • 本机防火墙未放行
  • 云服务器安全组未开放端口
  • 服务只绑定到本机回环地址

遇到“自己能访问,别人不能访问”时,优先从这三项排查。

08 / Section

七、本章小结

7.1 核心知识点回顾

text
1. Tomcat 是 Java Web 应用的运行容器
2. webapps 是默认部署目录
3. bin 负责启停,conf 负责配置,logs 负责日志
4. 直接部署最简单,虚拟映射最灵活,WAR 包更接近发布流程
5. URL 访问背后,本质是 Tomcat 做路径映射
6. ROOT、欢迎页、端口配置是最常见的三个基础操作

7.2 部署方式选择决策

text
资源放在哪里?
    │
    ├─ 在 webapps 下 -> 直接部署
    │
    ├─ 不在 webapps 下 -> 虚拟映射
    │
    └─ 需要分发或上线 -> WAR 包部署

7.3 一句话记忆

Tomcat 的学习主线,不是死记命令,而是始终抓住三件事:它是谁、它怎么启动、它如何把 URL 映射到本地应用。

09 / Section

附录:为什么理解手写服务器仍然有价值

虽然实际开发中我们不会自己重写一个完整的 Tomcat,但理解简化版服务器模型,能帮助你真正理解:

  • 服务端为什么要监听端口
  • 请求到来后为什么先解析请求行和请求头
  • 为什么最终一定要构造 HTTP 响应报文

一个极简服务器的核心逻辑可以概括成:

java
ServerSocket serverSocket = new ServerSocket(8080);
while (true) {
    Socket client = serverSocket.accept();
    // 读取请求
    // 找资源
    // 写响应
    client.close();
}

学习建议是:

  • 理解原理即可
  • 真正做 Web 开发时,优先使用 Tomcat 这类成熟容器