【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 核心知识点~若本文对你有帮助,欢迎点赞 + 收藏 + 关注,你的支持是我更新的最大动力💖!

相关推荐
2501_945837432 小时前
零信任架构落地,云服务器全生命周期安全防护新体系
服务器
web小白成长日记2 小时前
从零起步,用TypeScript写一个Todo App:踩坑与收获分享
前端·javascript·typescript
这儿有一堆花2 小时前
服务器安全:防火墙深度配置指南
服务器·安全·php
Q16849645152 小时前
红帽Linux-文件权限管理
linux·运维·服务器
不当菜虚困3 小时前
centos7虚拟机配置网络
运维·服务器·网络
圣心3 小时前
Gemini 模型 介绍
前端
郝学胜-神的一滴3 小时前
Linux条件变量:线程同步的利器
linux·服务器·开发语言·c++·程序人生·软件工程
抓娃小兵3 小时前
购买一台服务器后该做什么
运维·服务器
huangyiyi666663 小时前
前端-远程多选搜索框不能反显的问题解决
前端·javascript·vue.js·笔记·学习
敲敲了个代码3 小时前
让 Vant 弹出层适配 Uniapp Webview 返回键
前端·javascript·vue.js·学习·面试·uni-app