【Day32】Tomcat 服务器:安装、配置与 Web 应用部署

本文收录于「Java 学习日记:从入门到架构师」专栏,聚焦 Java Web 核心基础,从 Tomcat 实操入手,帮你打通 "写代码 - 部署运行" 的最后一公里~

一、为什么要学 Tomcat?

在上一篇 HTTP 协议的学习中,我们知道客户端的请求需要服务器来处理 ------ 而 Tomcat 就是 Java 开发者最常用的开源 Servlet 容器 / WEB 服务器

简单来说:

  • 你写的 SpringBoot、SSM 项目,本质上是运行在 Tomcat 中的;
  • 即使 SpringBoot 内置了 Tomcat,掌握独立 Tomcat 的安装、配置和部署,才能理解 Web 应用的运行原理;
  • 实际开发 / 运维中,部署项目、排查端口占用、调整 JVM 参数等场景,都离不开 Tomcat 的基础操作。

今天这篇日记,我们从 "下载安装→核心配置→项目部署" 全流程实操,新手也能跟着一步步做。

二、Tomcat 前置准备与安装(Windows/Linux 通用思路)

1. 前置条件

Tomcat 是 Java 开发的,必须先安装 JDK 并配置环境变量:

  • 验证:打开终端 / CMD,输入 java -version,能显示 JDK 版本即配置成功;
  • 版本兼容:Tomcat 9 推荐 JDK 8+,Tomcat 10 推荐 JDK 11+(注意:Tomcat 10 对 Servlet API 包名做了调整,新手先学 Tomcat 9)。

2. 下载 Tomcat

  1. 官网地址:Apache Tomcat 9
  2. 选择对应系统版本:
    • Windows:下载 32-bit/64-bit Windows Service Installer(安装版)或 zip(解压版,推荐);
    • Linux:下载 tar.gz 压缩包。

3. 安装 / 解压(以 Windows 为例)

  • 解压版:将下载的 zip 包解压到非中文、无空格的目录(如 D:\apache-tomcat-9.0.80);
  • 安装版:双击安装程序,一路下一步,注意选择 JDK 路径,端口默认 8080 即可。

4. 启动与验证 Tomcat

方式 1:脚本启动(推荐)
  1. 进入 Tomcat 解压目录的 bin 文件夹:
    • Windows:双击 startup.bat
    • Linux:执行 ./startup.sh(需先赋予权限:chmod +x startup.sh shutdown.sh);
  2. 验证:打开浏览器,输入 http://localhost:8080,能看到 Tomcat 默认页面即启动成功;
  3. 停止:bin 文件夹中双击 shutdown.bat(Windows)/ 执行 ./shutdown.sh(Linux)。
方式 2:Windows 服务启动

安装版可将 Tomcat 注册为系统服务:

  1. 以管理员身份运行 bin 中的 service.bat install
  2. 在 "服务" 中找到 Apache Tomcat 9,手动启动 / 停止。

三、Tomcat 核心目录与配置文件

先理清 Tomcat 的目录结构,后续配置和部署都基于这些目录:

目录 核心作用
bin 启动 / 停止脚本(startup.sh/bat、shutdown.sh/bat)
conf 核心配置文件(server.xml、web.xml、tomcat-users.xml)
webapps Web 应用部署目录(将项目放到这里即可运行)
logs 日志文件(排查问题的关键,如 catalina.out)
temp 临时文件目录
work Tomcat 编译 JSP 生成的 class 文件目录

1. 核心配置文件:server.xml(重点)

conf/server.xml 是 Tomcat 的核心配置文件,主要配置端口、连接器、引擎等,新手重点关注 3 个配置:

(1)修改 Tomcat 端口(解决端口占用)

默认端口 8080,若被占用,找到 <Connector> 标签修改:

xml

XML 复制代码
<!-- 默认8080端口,改为8081(任意未被占用的端口) -->
<Connector port="8081" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
  • port:HTTP 访问端口;
  • redirectPort:HTTPS 重定向端口;
  • connectionTimeout:连接超时时间(毫秒)。

修改后重启 Tomcat,访问地址变为 http://localhost:8081

(2)配置主机(Host)

默认主机是 localhost,对应部署目录 webapps/ROOT(访问 http://localhost:8080 实际访问的是这个目录):

xml

XML 复制代码
<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true">
  <!-- 日志相关配置 -->
  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
         prefix="localhost_access_log" suffix=".txt"
         pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
  • appBase:该主机的应用部署根目录;
  • autoDeploy:是否自动部署(放入 webapps 的项目会自动加载);
  • unpackWARs:是否自动解压 WAR 包。

2. 配置管理员账户(Tomcat 管理后台)

Tomcat 自带管理后台(http://localhost:8080/manager/html),可可视化部署项目,需先配置账户:

编辑 conf/tomcat-users.xml,在 <tomcat-users> 标签内添加:

xml

复制代码
<!-- 配置管理员角色和账户密码 -->
<user username="admin" password="123456" roles="manager-gui,admin-gui"/>
  • manager-gui:允许访问项目管理后台;
  • admin-gui:允许访问服务器管理后台。

⚠️ 注意:Tomcat 8+ 默认只允许本地访问管理后台,若需远程访问,需修改 webapps/manager/META-INF/context.xml,注释掉 IP 限制:

xml

XML 复制代码
<!-- 注释掉以下内容,允许所有IP访问 -->
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->

四、Web 应用部署(3 种常用方式)

方式 1:直接复制部署(最简单)

  1. 将你的 Web 项目(文件夹形式)或 WAR 包,直接复制到 Tomcat 的 webapps 目录;
  2. 若 Tomcat 已启动,会自动解压(WAR 包)并加载项目;
  3. 访问路径:http://localhost:8080/项目名/接口路径(如 http://localhost:8080/demo/login);
    • 若项目名是 ROOT,则访问路径为 http://localhost:8080/接口路径(默认根项目)。

方式 2:管理后台部署(可视化)

  1. 启动 Tomcat,访问 http://localhost:8080/manager/html,输入配置的 admin 账户密码;
  2. 找到 "Deploy" 区域,选择 WAR 包文件,点击 "Deploy" 即可完成部署;
  3. 可在后台直接启动 / 停止 / 卸载项目,适合测试环境。

方式 3:配置 Context 部署(指定路径)

若不想将项目放在 webapps 目录,可通过配置指定项目路径:

conf/Catalina/localhost 目录下,新建 demo.xml(文件名 = 项目访问路径),内容:

xml

XML 复制代码
<Context docBase="D:\projects\demo" reloadable="true"/>
  • docBase:项目的实际路径(文件夹或 WAR 包);
  • reloadable:是否热部署(项目文件修改后自动重启,开发环境推荐 true,生产环境推荐 false)。

配置后启动 Tomcat,访问路径为 http://localhost:8080/demo

五、实战:部署一个简单的 Java Web 项目

1. 准备项目(新手示例)

新建一个简单的 Web 项目,结构如下:

plaintext

复制代码
demo/
├── WEB-INF/
│   ├── web.xml       # Web核心配置文件
│   ├── classes/      # 存放class文件(空即可)
│   └── lib/          # 存放依赖包(空即可)
└── index.html        # 测试页面

index.html 内容:

html

预览

html 复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Tomcat部署测试</title>
</head>
<body>
    <h1>🎉 恭喜!Tomcat部署成功!</h1>
    <p>Java学习日记 - Day32</p>
</body>
</html>

WEB-INF/web.xml 内容(最简配置):

xml

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!-- 默认首页 -->
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
</web-app>

2. 部署并访问

  1. demo 文件夹复制到 Tomcat 的 webapps 目录;
  2. 启动 Tomcat;
  3. 打开浏览器访问 http://localhost:8080/demo,能看到测试页面即部署成功。

六、避坑指南:Tomcat 常见问题

  1. 端口占用 :启动 Tomcat 提示 "8080 端口被占用",可修改 server.xml 中的端口,或用 netstat -ano | findstr 8080(Windows)/ lsof -i:8080(Linux)查看占用进程,结束后重启;
  2. 启动闪退:大概率是 JDK 环境变量未配置,或 Tomcat 解压路径有中文 / 空格,检查后重新配置;
  3. 项目访问 404 :确认项目放在 webapps 目录,且访问路径正确(http://localhost:8080/项目名),若配置了 Context,检查 docBase 路径是否正确;
  4. 权限不足(Linux) :启动 Tomcat 提示 "Permission denied",执行 chmod +x bin/*.sh 赋予脚本执行权限。

七、今日实战小任务

  1. 下载并安装 Tomcat 9,修改默认端口为 8081,启动后验证;
  2. 配置 Tomcat 管理员账户,登录管理后台;
  3. 编写一个简单的 HTML 页面,打包成 Web 项目部署到 Tomcat,访问验证。

总结

  1. Tomcat 是 Java Web 核心服务器,核心目录中 conf 存放配置、webapps 存放部署的项目、bin 存放启动 / 停止脚本;
  2. server.xml 是核心配置文件,可修改端口、配置主机,tomcat-users.xml 用于配置管理后台账户;
  3. Tomcat 部署项目有 3 种常用方式:复制到 webapps、管理后台部署、配置 Context 部署,新手优先掌握第一种。

下一篇【Day33】预告:Servlet 核心详解(生命周期、请求 / 响应处理、实战案例),关注专栏持续解锁 Java Web 核心知识点~若本文对你有帮助,欢迎点赞 + 收藏 + 关注,你的支持是我更新的最大动力💖!

相关推荐
tianyuanwo15 分钟前
企业级NTP客户端配置指南:基于内部NTP服务器的实践
运维·服务器·ntp客户端
0思必得016 分钟前
[Web自动化] Selenium处理滚动条
前端·爬虫·python·selenium·自动化
Misnice18 分钟前
Webpack、Vite、Rsbuild区别
前端·webpack·node.js
青茶36020 分钟前
php怎么实现订单接口状态轮询(二)
前端·php·接口
_别来无恙_1 小时前
TFTP的使用Linux
linux·服务器
gaize12131 小时前
Moltbot(Clawdbot) 专属轻量服务器
运维·服务器
大橙子额1 小时前
【解决报错】Cannot assign to read only property ‘exports‘ of object ‘#<Object>‘
前端·javascript·vue.js
Zaralike1 小时前
Linux 服务器网络不通排查 SOP(标准操作流程)
linux·服务器·网络
我真会写代码1 小时前
SSM(指南一)---Maven项目管理从入门到精通|高质量实操指南
java·spring·tomcat·maven·ssm
DN金猿1 小时前
接口路径正确,请求接口却提示404
java·tomcat