市场上有很多 Web 容器,著名的有 Tomcat、Jetty、JBoss、WebLogic 等,初学者最常使用的是 Tomcat。
Tomcat 是 Java 官方推出一款免费、开源的 Web 容器,它技术先进、性能稳定,而且免费,因而深受 Java 爱好者的喜爱,并得到了部分软件开发商的认可,成为目前比较流行的 Web 应用服务器。

Tomcat 的主要组件包括 Server 服务器、Service 服务、Connector 连接器和 Container 容器。
Connector 连接器和 Container 容器是 Tomcat 的核心。一个 Container 容器和一个或多个 Connector 连接器组合在一起,加上其他一些支持组件共同组成一个 Service 服务,有了 Service 服务便可以对外提供服务能力。
本文将为您讲解 Tomcat 的下载和安装。
下载Tomcat
Tomcat 有很多个版本,不同的 Tomcat 版本支持的 Java 版本也不同,读者可以根据自己的 JDK/JRE 版本来选择对应的 Tomcat 版本,如下图所示:
| Tomcat 版本 | 最新子版本 | Servlet 规范 | JSP 规范 | EL 规范 | WebSocket 规范 | 认证(JASIC) 规范 | Java 版本 JDK/JRE 版本 |
|---|---|---|---|---|---|---|---|
| 11.0.x | 11.0.11 | 6.1 | 4.0 | 6.0 | 2.0 | 3.1 | 17 以及更高 |
| 10.1.x | 10.1.46 | 6.0 | 3.1 | 5.0 | 2.1 | 3.0 | 11 以及更高 |
| 9.0.x | 9.0.109 | 4.0 | 2.3 | 3.0 | 1.1 | 1.1 | 8 以及更高 |
我的电脑使用的是 JDK 8,对应的 Tomcat 版本是 9,因此我选择了 Tomcat 9,大家可以根据自己的情况选择合适的版本:
下载Tomcat: 下载tomcat
链接中给出了 Windows、Linux 和 Mac OS 环境下的 Tomcat 安装包,版本包 9、10 和 11,请读者根据自己的操作系统选择对应的安装包。
注意,Windows 下的 Tomcat 有安装版和解压版,下面说一下它们的区别:
1) 安装版 Tomcat
安装版 Tomcat 下载后得到一个 exe 安装包,和其它软件的安装流程没有什么区别。
安装版 Tomcat 在安装过程中会自动进行相关配置,比如找到 JDK 的位置、读取环境变量 JAVA_HOME 等。安装版 Tomcat 在启动后以服务的方式运行,并且带有 GUI 管理工具(图形界面化的管理工具),用户可以很方便地通过界面进行管理和操作,非常友好。
2) 解压版 Tomcat
解压版 Tomcat 下载后得到一个 zip 压缩包,是免安装的,使用 WinRAR 等软件解压到任意目录后就可以直接使用。
解压版 Tomcat 还可以到处移动,您可以将它从 A 文件夹移动到 B 文件夹,甚至移动到 U 盘,是真正的绿色版。当您不再使用时,直接删除文件夹即可卸载解压版 Tomcat。
我的建议
我建议读者使用解压版 Tomcat,除了安装和卸载方便,解压版 Tomcat 还没有 GUI 界面,只能通过使用各种配置文件和命令来操作和管理,这利于初学者学习 Tomcat 的启动和运行流程。这也是大部分 Tomcat 教材的建议。
安装Tomcat
我的电脑是 64 位,下载 64 位 Windows 解压版后得到 apache-tomcat-9.0.xxx-windows-x64.zip,将其解压缩到计算机某磁盘(最好不要选择 C 盘)即可。

解压缩完成后,打开 Tomcat 所在目录,可以看到它包含了很多子文件夹,它们的作用如下表所示:
| 子目录 | 说明 |
|---|---|
| bin | 命令中心(启动命令,关闭命令......) |
| conf | 配置中心(端口号,内存大小......) |
| lib | Tomcat 的库文件。Tomcat 运行时需要的 jar 包所在的目录。 |
| logs | 存放日志文件。 |
| temp | 存储临时产生的文件,即缓存。 |
| webapps | 存放项目的文件,web 应用放置到此目录下浏览器可以直接访问。 |
| work | 编译以后的 class 文件。 |
- bin 目录用来存放 Tomcat 命令,主要分为两大类,一类是以
.sh结尾的 Linux 命令,另一类是以.bat结尾的 Windows 命令。很多环境变量都在此处设置,例如 JDK 路径、Tomcat 路径等。

下面是几个常用的 Tomcat 命令:
- startup.sh/startup.bat:用来启动 Tomcat;
- shutdown.sh/shutdown.bat:用来关闭 Tomcat;
- catalina.bat/ catalina.bat:用来设置 Tomcat 的内存。
- conf 目录主要是用来存放 Tomcat 的配置文件,如下图所示:

下面是常用到的几个文件:
- server.xml 用来设置域名、IP、端口号、默认加载的项目、请求编码等;
- context.xml 用来配置数据源等;
- tomcat-users.xml 用来配置和管理 Tomcat 的用户与权限;
- web.xml 可以设置 Tomcat 支持的文件类型;
- 在 Catalina 目录下可以设置默认加载的项目。
- lib 目录主要用来存放 Tomcat 运行需要加载的 jar 包。

- logs 目录用来存放 Tomcat 在运行过程中产生的日志文件,清空该目录中的文件不会对 Tomcat 的运行带来影响。
在 Windows 系统中,控制台的输出日志在 catalina.xxxx-xx-xx.log 文件中;在 Linux 系统中,控制台的输出日志在 catalina.out 文件中。
- temp 目录用来存放 Tomcat 在运行过程中产生的临时文件,清空该目录中的文件不会对 Tomcat 的运行带来影响。

- webapps 目录用来存放应用程序(也就是通常所说的网站),当 Tomcat 启动时会去加载 webapps 目录下的应用程序,我们编写的 Servlet 程序就可以放在这里。Tomcat 允许以文件夹、war 包、jar 包的形式发布应用。

work 目录用来存放 Tomcat 在运行时的编译文件(也即 class 字节码文件),例如 JSP 编译后的文件。清空 work 目录,然后重启 Tomcat,可以达到清除缓存的作用
配置环境变量
正式启动 Tomcat 前,我们还需要为其配置环境变量,包括 JAVA_HOME 和 CATALINA_HOME,步骤如下。
1) 配置JAVA_HOME环境变量
① 右击"计算机/我的电脑/此电脑"按钮,选择"属性"选项,如下图所示。

② 单击"高级系统设置"选项,如下图所示。

③ 单击"高级"选项卡中的"环境变量(N)..."按钮,如下图所示。

④ 在系统变量中单击"新建"按钮,创建"JAVA_HOME"变量,对应的变量值为 JDK 安装目录,如"D:\Program Files\Java\jdk1.8.0_141",如下图所示(注意,这里先检查是否已经配置该环境变量,没有配置再新建)。

⑤ 找到"系统变量"的 Path 变量,将"%JAVA_HOME%\bin"加入 Path 环境变量中,并单击"确定"按钮,如下图所示。

建议使用系统变量中的 Path 变量,而不是上面用户变量中的 Path 变量,它们的区别在于,系统变量适用于任意用户,用户变量仅适用于当前用户。
⑥ 验证环境变量是否配置成功。关闭之前的命令行窗口,再次打开一个新的命令行窗口,否则新配置的环境变量在原来的命令行窗口不起作用。Windows+R 键,再次输入 cmd,打开命令行窗口,然后输入javac,发现在任意目录运行 javac 时不会提示"javac 不是内部或外部命令",如下图所示,说明环境变量配置成功。

2) 配置CATALINA_HOME环境变量
CATALINA_HOME 环境变量用来指定 Tomcat 的安装路径,为可选项。配置过程同上,打开"环境变量"管理页面,在系统变量中创建 CATALINA_HOME 环境变量,如下图所示。

最后将"%CATALINA_HOME%\bin"加入 Path 变量中,如下图所示。

启动Tomcat
配置好环境变量,接下来就可以正式启动 Tomcat 了。在 Tomcat 解压目录的 bin 目录下双击 startup.bat 启动 Tomcat 服务器,如下图所示,在浏览器地址栏访问"http://localhost:8080"进行测试。

如果启动失败,可能存在以下两种情况。
【情况一】如果双击 startup.bat 后窗口一闪而过,请查看 JAVA_HOME 是否配置正确。双击 startup.bat 会调用 catalina.bat,而 catalina.bat 会调用 setclasspath.bat,setclasspath.bat 会使用 JAVA_HOME 环境变量,因此我们必须在启动 Tomcat 之前把 JAVA_HOME 配置正确。
【情况二】如果启动失败,提示端口号被占用,则将默认的 8080 端口修改为其他未使用的值,例如 8989 等。具体操作步骤如下,打开 Tomcat 解压目录下"conf\server.xml"文件,找到第一个 <Connector> 标签,修改 port 属性值,如下图所示。

Web 服务器在启动时,实际上监听了本机上的一个端口,当有客户端向该端口发送请求时,Web 服务器就会处理请求。但是如果不是向其所监听的端口发送请求,Web 服务器不会做任何响应。例如,Tomcat 启动监听了 8989 端口,而访问的地址是"http://localhost:8080",将不能正常访问。