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

相关推荐
草履虫建模12 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
qq_2975746714 小时前
【实战教程】SpringBoot 实现多文件批量下载并打包为 ZIP 压缩包
java·spring boot·后端
老毛肚14 小时前
MyBatis插件原理及Spring集成
java·spring·mybatis
学嵌入式的小杨同学14 小时前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
lang2015092815 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet
Re.不晚15 小时前
Java入门17——异常
java·开发语言
缘空如是15 小时前
基础工具包之JSON 工厂类
java·json·json切换
追逐梦想的张小年15 小时前
JUC编程04
java·idea
好家伙VCC15 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
南极星100516 小时前
蓝桥杯JAVA--启蒙之路(十)class版本 模块
java·开发语言