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 用于监听容器或对象生命周期变化,不参与请求处理。

相关推荐
小宋102113 分钟前
不用学算法也能玩转 AI?普通 Java 程序员转 AI 应用开发路线
java·人工智能·重构
我是唐青枫1 小时前
Java Jetty 实战详解:从嵌入式 HTTP 服务到 Spring Boot 容器替换
java
带刺的坐椅1 小时前
当所有人都在用 TS/Python 写 Agent,我们为什么坚持 Java
java·ai·solon·codex·opencode·soloncode
小王师傅661 小时前
英语学习记
java·学习
早点睡啊Y2 小时前
深入学LangChain官方文档:Observability 与 Studio——先看清 Agent 到底做了什么
java·数据库·langchain
雨落在了我的手上2 小时前
Java数据结构(六):链表的介绍
java·开发语言·数据结构
独隅2 小时前
DevEco Code Plan+Build 双 Agent 协同开发效率实测
java·开发语言
吃饱了得干活3 小时前
@Transactional 又失效了?把这 8 个坑全填了!
java·后端·spring
今天AI了吗3 小时前
Spring AI 框架实战:Java 后端集成大模型的架构设计与工程落地
java·人工智能·python·spring·机器学习
hexu_blog3 小时前
springboot3集成shardingsphere4.0 分表分库
java·spring boot·mybatis