一篇搞懂Tomcat:什么是Web容器?怎么部署?怎么配置?
一、什么是Tomcat?
定义:Tomcat是一个开源的、轻量级的Web容器(也叫Servlet容器),由Apache基金会开发。它的核心作用是:接收浏览器发来的HTTP请求,调用你写的Java代码(Servlet/JSP),然后把结果返回给浏览器。
一句话:你在浏览器输入网址,Tomcat接收请求、执行Java程序、返回网页内容。没有它,你的Java代码只能自己跑,没法被外部访问。
为什么需要Web容器?
写Java程序处理HTTP请求,你需要自己监听端口、解析HTTP报文、管理线程、处理并发……Tomcat把这些脏活累活全包了,你只需要专注写业务逻辑(Servlet)。
二、Tomcat的特点
| 特点 | 说明 |
|---|---|
| 基于Java | 跨平台:Windows/Linux/Mac都能跑,只要有JRE |
| 实现了Servlet和JSP规范 | 遵守Java EE标准,你只要按规范写代码,Tomcat就能自动调用 |
| 内置HTTP服务器 | 不需要额外安装Apache或Nginx,自己就能处理HTTP请求和响应 |
| 轻量级 | 相比商业的WebLogic、WebSphere,Tomcat免费、简单、启动快 |
| 支持静态资源 | 也能放HTML、CSS、图片、JS,但动态处理是它的强项 |
| 开源、社区活跃 | 文档丰富,遇到问题容易找到解决方案 |
三、Tomcat的核心概念
1. Web容器(Container)
容器 = 一个管理Java类生命周期、分配请求、提供底层服务的环境。
Tomcat实现了Servlet规范,所以也叫Servlet容器。
-
你写一个类继承
HttpServlet,Tomcat就能自动调用它的doGet()/doPost()。 -
Tomcat负责创建你的Servlet实例、调用它、销毁它。
没有容器时你要自己做:监听端口、解析HTTP报文、反射调用方法、拼响应报文……
有了容器你只需要:写Servlet类、加注解或配置web.xml、启动Tomcat。
2. 连接器(Connector)
Tomcat里有一块叫连接器的组件,专门负责:
-
监听HTTP端口(默认8080)。
-
接收HTTP请求报文,解析成Java对象(
HttpServletRequest)。 -
把你要返回的Java对象(
HttpServletResponse)转成HTTP响应报文。
连接器 + 容器 = Tomcat的核心架构(很多人称它们为“心脏”)。
3. 部署(Deploy)
把你的Java Web应用放到Tomcat里运行的过程叫部署。
最简单的方式:
-
把你的项目打成
.war文件(Web Archive)。 -
复制到Tomcat的
webapps/目录下。 -
启动Tomcat,它会自动解压并运行。
访问地址:http://localhost:8080/你的项目名/你的路径
四、Tomcat如何处理一个HTTP请求?(对应HTTP的“请求/响应”)
你已经学过了HTTP请求和响应。Tomcat在其中的角色如下表:
| 步骤 | 谁在做 | 说明 |
|---|---|---|
| 1. 浏览器发请求 | 客户端 | GET /myapp/hello HTTP/1.1 |
| 2. 接收TCP连接,解析HTTP报文 | Tomcat的Connector | 把报文变成HttpServletRequest对象 |
| 3. 根据URL找到对应的Servlet | Tomcat的Container | 通过映射(注解或web.xml)定位到你的类 |
| 4. 执行业务逻辑 | 你写的Servlet | doGet()/doPost()里写代码 |
| 5. 把结果包装成HTTP响应 | Tomcat的Connector | 把HttpServletResponse转成响应报文 |
| 6. 浏览器收到并渲染 | 客户端 | 看到网页 |
所以:你学HTTP时看的请求行、请求头、状态码,Tomcat内部都会帮你解析和生成。
五、Tomcat的目录结构(看一眼就够)
| 目录 | 作用 |
|---|---|
bin/ |
启动/关闭脚本(startup.bat,shutdown.sh) |
conf/ |
配置文件:server.xml(核心配置,改端口在这)、web.xml(全局默认配置) |
lib/ |
Tomcat运行依赖的JAR包(Servlet API等) |
logs/ |
日志文件(启动报错、访问日志都在这) |
webapps/ |
放你的Web应用(.war文件或文件夹) |
work/ |
JSP编译后的Servlet文件(不用管) |
六、常见配置(修改端口等)
| 配置项 | 配置文件 | 常见修改 |
|---|---|---|
| 端口号 | conf/server.xml |
把8080改成80(省去输入端口)或改成8081(避免冲突) |
| 是否显示目录列表 | conf/web.xml |
listings 改为 true(调试用,生产环境要关) |
| 虚拟主机 | conf/server.xml |
添加<Host>,支持多个域名 |
| JVM内存设置 | bin/catalina.bat(Windows)或setenv.sh |
JAVA_OPTS="-Xmx512m" |
七、Tomcat vs 其他Web服务器(对比表格)
| 名称 | 类型 | 能做什么 | 是否免费 |
|---|---|---|---|
| Tomcat | Web容器(Servlet容器) | 运行Java动态Web,也能做静态资源 | 是 |
| Jetty | 类似Tomcat | 更轻量,适合嵌入式 | 是 |
| Apache HTTP Server | Web服务器 | 擅长静态文件、反向代理,不能直接跑Java | 是 |
| Nginx | Web服务器 | 高并发、反向代理、负载均衡,不跑Java | 是 |
| WebLogic / WebSphere | Java EE容器 | 全功能(EJB、JMS等),重型企业级 | 否(收费) |
实际开发常见组合:Nginx(前端反向代理) + Tomcat(后端Java应用)。
八、无状态?Tomcat怎么记住用户?
你已经学过HTTP是无状态的。Tomcat提供了内置的Session管理来记住用户:
-
当第一次请求调用
request.getSession()时,Tomcat会创建一个HttpSession对象,并生成一个唯一的JSESSIONID。 -
Tomcat通过Cookie(名叫
JSESSIONID)把这个id发给浏览器。 -
浏览器后续请求自动带上这个Cookie,Tomcat根据id找到之前创建的Session对象。
一句话:Tomcat自己实现了基于Cookie+Session的“有状态”能力,让多个HTTP请求之间能共享数据。
九、动手实验(5分钟体验)
实验1:下载并启动Tomcat
-
访问
https://tomcat.apache.org,下载Tomcat 9或10(Windows选.zip,Linux/Mac选.tar.gz)。 -
解压到任意目录(路径不要有中文或空格)。
-
进入
bin/目录:-
Windows:双击
startup.bat -
Mac/Linux:运行
./startup.sh
-
-
打开浏览器,访问
http://localhost:8080-
看到一只猫的图片和“Tomcat”字样 → 启动成功 ✅
-
截图保存,这是你跑起的第一个Java Web服务器。
常见问题:
-
如果双击 startup.bat 后黑窗一闪就关闭,通常是因为没有配置 JAVA_HOME 环境变量。请确认已安装 JDK(不是 JRE),并设置 JAVA_HOME 指向 JDK 目录(例如 C:\Program Files\Java\jdk-17)。
-
如果 Tomcat 窗口正常启动,但浏览器访问 http://localhost:8080 失败(提示无法连接),可能是端口 8080 被其他程序占用。可以修改 conf/server.xml 中的 8080 为其他端口(如 8888),保存后重启 Tomcat 再试。
实验2:部署一个静态HTML
-
在
webapps/下新建一个文件夹,比如myapp。 -
用记事本写一个
hello.html,内容<h1>Hello Tomcat!</h1>。 -
把
hello.html放进myapp/文件夹。 -
访问
http://localhost:8080/myapp/hello.html→ 看到大标题。
这证明Tomcat也能当静态文件服务器。
说明:这里的 myapp 就是上下文路径(Context Path),所以访问 URL 是 /myapp/hello.html。
如果你想直接通过 http://localhost:8080/hello.html 访问(不带项目名),可以把 hello.html 放到 webapps/ROOT/ 目录下(ROOT 是 Tomcat 的默认根应用)。
实验3:用F12观察Tomcat的响应头
-
启动 Tomcat,访问 http://localhost:8080/examples/(如果下载的 Tomcat 不带 examples 应用,请直接访问 http://localhost:8080/)。
-
按F12 → Network → 刷新页面。
-
点击第一个请求,看Response Headers:
-
找到
Server: Apache-Coyote/1.1(表示背后是Tomcat) -
找到
Set-Cookie: JSESSIONID=...(Tomcat自动发的Session Cookie)
-
实验4:关闭Tomcat
在 bin/ 目录下:
-
Windows:双击
shutdown.bat -
Mac/Linux:运行
./shutdown.sh
刷新浏览器会看到“无法连接”。
提示:如果双击 shutdown.bat 后 Tomcat 窗口没有关闭,可以打开命令行,进入 bin 目录,手动执行 catalina.bat stop(Windows)或 ./catalina.sh stop(Mac/Linux)。
实验5:修改端口,体会配置文件的作用
-
关闭 Tomcat(确保完全停止)。
-
用记事本打开 conf/server.xml,找到下面这行:
<Connector port="8080" protocol="HTTP/1.1" ... />
-
把 8080 改成 8888,保存文件。
-
重新启动 Tomcat。
-
打开浏览器,访问 http://localhost:8080 → 失败(无法连接)。
-
访问 http://localhost:8888 → 成功看到 Tomcat 首页。
-
(可选)改回 8080,重启后恢复。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)