2026.1.2 Tomcat保姆级使用教程

文章目录

  • Tomcat保姆级使用教程
    • [Tomcat 及 Servlet 介绍](#Tomcat 及 Servlet 介绍)
    • Tomcat安装及配置
    • [写第一个 Servlet](#写第一个 Servlet)
      • [引入 Servlet API](#引入 Servlet API)
      • [编写 HelloServlet](#编写 HelloServlet)
    • [配置 WEB.XML](#配置 WEB.XML)
      • [编写 web.xml](#编写 web.xml)
    • 配置pom文件
    • [在IDEA中启动 Tomcat](#在IDEA中启动 Tomcat)
      • [配置 Tomcat Run Configuration](#配置 Tomcat Run Configuration)
    • [运行 Tomcat](#运行 Tomcat)
    • [Tomcat 的项目目录体系(了解加深)](#Tomcat 的项目目录体系(了解加深))
      • [一、Tomcat 眼里的 Web 项目是什么?](#一、Tomcat 眼里的 Web 项目是什么?)
      • [二、Tomcat 的整体目录结构(容器级)](#二、Tomcat 的整体目录结构(容器级))
        • [1.bin/ ------ 启动器(不是运行逻辑)](#1.bin/ —— 启动器(不是运行逻辑))
        • [2.conf/ ------ 容器配置(不是项目配置)](#2.conf/ —— 容器配置(不是项目配置))
        • [3.lib/ ------ 容器级依赖](#3.lib/ —— 容器级依赖)
        • [4.logs/ ------ 日志](#4.logs/ —— 日志)
        • [5.temp/ ------ 临时文件](#5.temp/ —— 临时文件)
        • [6.work/ ------ JSP / Servlet 编译产物](#6.work/ —— JSP / Servlet 编译产物)
        • [7.webapps/ ------ Web 应用"部署区"(最关键)](#7.webapps/ —— Web 应用“部署区”(最关键))
      • 附:

Tomcat保姆级使用教程

Tomcat 及 Servlet 介绍

Servlet 是什么?Tomcat 是什么?

  • Servlet 是"规范+接口",规定了Java Web 程序应该长什么样,Tomcat 应该怎么调用你
  • Tomcat 是" Servlet 规范的实现者+运行者",是一个程序,负责真正监听端口、接收 HTTP 请求、按照 Servlet 规范调用你的代码

用一条链路把关系钉死

浏览器向 Tomcat 发送 HTTP 请求,Tomcat 按照 Servlet 规范调用你的业务代码

明明有 Spring Boot,为什么要费尽心思使用 Tomcat

事实上,这个问题不是"要不要学Tomcat",而是:你需不需要理解"Spring 是如何被运行起来的"。如果你只想用 Spring 写业务,可以不主动碰Tomcat。如果你想真正理解 Java Web、排查线上问题、往后走得更远,那 Tomcat是绕不开的基础设施层。

Tomcat安装及配置

下载网址:https://tomcat.apache.org/download-90.cgi

笔者用的是Windows系统的9.0.x版本

配置Tomcat

新建项目

完全按照图片创建下述文件

写第一个 Servlet

引入 Servlet API

在 File 中打开 Project Structure

选择依赖jar包

编写 HelloServlet

java 复制代码
package com.example.web;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @authore Longan
 * @description
 */
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("hello servlet from IDEA");
    }
}

这一步你只需要确定:这个类不是 main 启动的

配置 WEB.XML

编写 web.xml

路径:

复制代码
src/main/webapp/WEB-INF/web.xml

内容:

xml 复制代码
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         version="4.0">
</web-app>

我们只需要创建一个空壳,因为文件访问路径已经在 HelloServlet 定义了1

配置pom文件

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itheima</groupId>
    <artifactId>servlet-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

在此文件中主要引入servlet依赖jar包

在IDEA中启动 Tomcat

配置 Tomcat Run Configuration

Server标签页

Deployment页

运行 Tomcat

自行在浏览器中输入

复制代码
http://localhost:8080/servlet-demo/hello

即可看到

复制代码
hello servlet from IDEA

Tomcat 的项目目录体系(了解加深)

一、Tomcat 眼里的 Web 项目是什么?

在 Tomcat 看来,一个 Web 应用 = 一个 Context。

  • 一个 Context
  • 对应一个 访问路径(context-path)
  • 对应磁盘上的 一个目录或一个 war

例如:

Text 复制代码
http://localhost:8080/servlet-demo/hello
                 ↑
             Context Path

这个 servlet-demo,在 Tomcat 里就是一个 StandardContext。

二、Tomcat 的整体目录结构(容器级)

以本文的 Tomcat 9 为例:

复制代码
apache-tomcat-9.0.113/
├── bin/
├── conf/
├── lib/
├── logs/
├── temp/
├── webapps/
├── work/

下面逐个讲 "它在干什么"。

1.bin/ ------ 启动器(不是运行逻辑)
复制代码
bin/
├── startup.bat
├── catalina.bat
├── shutdown.bat

作用:

  • 启动 JVM
  • 设置 classpath
  • 加载 catalina 核心类

bin 不是 Web 应用的一部分 ,你永远不把代码放这里

2.conf/ ------ 容器配置(不是项目配置)
复制代码
conf/
├── server.xml
├── web.xml
├── context.xml
├── tomcat-users.xml
文件 作用
server.xml Tomcat 内核结构(端口、Connector)
web.xml 全局默认 Servlet 规则
context.xml Context 默认配置
tomcat-users.xml 管理员账户

注意:conf/web.xml ≠ 你项目的 web.xml

它是所有 Web 应用的默认模板

你项目的 web.xml 是"覆盖 / 补充"

3.lib/ ------ 容器级依赖
复制代码
lib/
├── servlet-api.jar
├── jsp-api.jar

特点:

  • 所有 Web 应用 共享
  • 对应 Maven 中的 provided

为什么你运行时不用把 servlet-api 打进包?因为 Tomcat 已经在 lib/ 里了

4.logs/ ------ 日志

Tomcat运行时 90% 的线索都在这里。

  • catalina.log
  • localhost.log
  • manager.log

如果浏览器在访问路径时报错,不论是404或500,真相一定在logs里面

5.temp/ ------ 临时文件
  • 上传文件
  • IO 缓冲
  • 可随时删除
6.work/ ------ JSP / Servlet 编译产物
复制代码
work/
└── Catalina/
    └── localhost/
        └── servlet-demo/

这里存放的是:

  • JSP 编译成的 .java / .class
  • Tomcat 运行时生成的中间文件
7.webapps/ ------ Web 应用"部署区"(最关键)
复制代码
webapps/
├── ROOT/
├── manager/
├── docs/
├── examples/
├── servlet-demo/

每一个子目录 = 一个 Web 应用

目录 访问路径
ROOT /
manager /manager
servlet-demo /servlet-demo

Tomcat 扫描 webapps 来加载应用

附:

Request / Response 由 Tomcat 在一次 HTTP 请求开始时同时创建,请求结束后统一销毁。

Cookie 是客户端的键值对存储,随请求自动携带,通常保存 SessionId;Session 是服务器端的 Map,由 Tomcat 根据 SessionId 管理并绑定到 Request。

转发是服务器内部的资源跳转,只有一次请求,Request 不变;重定向是服务器通知浏览器重新发起请求,会产生新的 Request,URL 会变化。

请求进入 Tomcat 后会先经过 Filter 的前置处理,再进入 Servlet,Servlet 处理完成后回到 Filter 做后置处理,最终由 Tomcat 封装 Response 返回客户端。

Listener 用于监听容器或对象生命周期变化,不参与请求处理。

相关推荐
知无不研6 小时前
.练习- Java字符串之String类创建字符串之使用equals和==判断字符串是否相等
java·开发语言
IT英语写作研习社6 小时前
一句话解释Java 8 流streams 和函数式接口、λ表达式的关系
java
Slow菜鸟6 小时前
Java基础 | JWT登录场景化最优方案(一)
java·开发语言
IT枫斗者7 小时前
Spring Boot 4.0 正式发布:新一代起点到底“新”在哪?(Spring Framework 7 / Java 25 / JSpecify / API 版本管理 / HTTP Service
java·开发语言·spring boot·后端·python·spring·http
龙茶清欢7 小时前
WebClient:Spring WebFlux 响应式 HTTP 客户端权威说明文档
java·spring·http
没有bug.的程序员7 小时前
网关在高并发场景下的优化实践:从Reactor模型到GC调优的深度指南
java·jvm·高并发·gc调优·网关优化·reactor模型·netty调优
独自破碎E7 小时前
Spring Boot 2.x和1.x版本相比有哪些区别与改进?
java·spring boot·后端
人邮异步社区7 小时前
C++之父的《C++程序设计语言》(第4版)重译出版!
java·jvm·c++
青云交7 小时前
Java 大视界 -- 基于 Java+Storm 构建实时日志分析平台:从日志采集到告警可视化(440)
java·grafana·flume·storm·数据聚合·实时日志分析·告警可视化