Tomcat文件结构分析

1. bin (Binary) - 启动/停止
-
作用:存放 Tomcat 的可执行脚本文件。
-
关键文件:
-
startup.bat(Windows) /startup.sh(Linux/Mac): 启动 Tomcat 的脚本。 -
shutdown.bat(Windows) /shutdown.sh(Linux/Mac): 停止 Tomcat 的脚本。 -
catalina.bat/catalina.sh: 真正的核心启动脚本,startup其实就是调用了它。
-
-
你的场景 :当你修改完配置文件或放入 War 包后,需要进这里双击
startup.bat来重启服务。
2. conf (Configuration) - 核心配置 [⭐重点]
-
作用:存放 Tomcat 的所有全局配置文件。
-
关键文件:
-
server.xml:最重要的配置文件。修改端口(8080 -> 8085)、配置 Context 路径映射就在这里。 -
web.xml:所有 Web 应用的默认配置(比如定义了默认的欢迎页 index.html,定义了 session 过期时间)。 -
context.xml:全局的 Context 配置。 -
tomcat-users.xml:配置 Tomcat 管理页面(Manager App)的用户名和密码。
-
3. lib (Library) - 依赖库
-
作用 :存放 Tomcat 运行所需的 JAR 包,以及所有 Web 应用共享的 JAR 包。
-
注意:
-
这里面有 Servlet API、JSP API 等基础包。
-
如果你有多个项目都需要用同一个 JDBC 驱动,可以把驱动 jar 放在这里(虽然现在开发通常建议放在项目自己的
WEB-INF/lib下)。
-
4. logs (Logs) - 排错日志 [⭐重点]
-
作用:存放运行日志。
-
关键文件:
-
catalina.out(Linux) 或catalina.xxxx-xx-xx.log(Windows):控制台输出的日志。如果启动报错、代码抛异常,第一时间看这里。 -
localhost_access_log.txt:访问日志,记录了谁在什么时间请求了哪个接口,返回状态码是 200 还是 404。
-
5. webapps (Web Applications) - 部署目录 [⭐重点]
-
作用:默认的项目部署目录。
-
机制:
-
当你把
.war包扔进去,Tomcat 启动时会自动解压。 -
ROOT文件夹 :这是默认的根应用(访问localhost:8080/时对应的项目)。你之前的操作中,为了让你的项目变成根应用,建议删除这里的ROOT文件夹,然后把你的 war 包改名为ROOT.war放进去。
-
6. work
-
作用 :存放 JSP 编译后生成的
.class文件和.java文件。 -
原理 :JSP 本质是 Servlet,Tomcat 会把
.jsp翻译成 Java 代码并编译。 -
技巧:如果你修改了 JSP 页面但浏览器刷新没变化,可以尝试清空这个文件夹,强制 Tomcat 重新编译 JSP。
7. temp
-
作用:存放 Tomcat 运行时产生的临时文件。
-
维护:通常不需要管它,重启后这里的文件大多可以清理。
📄 根目录下的文件
-
LICENSE,NOTICE,RELEASE-NOTES:法律许可、版本说明等文档。 -
RUNNING.txt:官方提供的简易运行指南。
环境准备
-
安装 JDK
-
确保电脑已安装 JDK,并配置好
JAVA_HOME环境变量。 -
验证命令:
java -version
-

-
下载并解压 Tomcat
-
去 Apache Tomcat 官网 下载对应版本的 Core zip/tar.gz 包。
-
解压到一个路径中(注意:路径不要包含中文或空格 ),例如:
D:\dev\apache-tomcat-9.0或/usr/local/tomcat.
-
项目打包

XML
<packaging>war</packaging>
根据自己的项目类型选择打包方式 这是演示的是ssm的javaweb项目所以使用的

XML
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
意思是把配置文件也进行打包 有的老版本idea需要手动编写这段配置 新版一般会自动编写
在命令行里面输入mvn clean package进行打包

或者使用maven可视化工具进行打包 先点击clean 在点击package

打包完成后会出现一个target文件夹 点击进去 里面会有一个war包一般是(项目.war)这我我修改了打包的名称 在build标签里面 添加一个<finalName>标签进行配置

项目部署
场景一:最基础部署(不需要配置)
如果你的需求只是:
-
接受默认端口
8080。 -
接受访问路径带项目名(如
http://localhost:8080/myapp)。
操作 :直接把 myapp.war 扔进 webapps 目录,启动即可。不需要动 conf 目录下的任何文件。
场景二:端口冲突(需要配置)
如果你电脑上的 8080 端口已经被占用了(比如被另一个 Java 程序或 Jenkins 占用),Tomcat 启动会报错 Address already in use。
操作 :修改 conf/server.xml。 找到 <Connector port="8080" ...>,把 8080 改成 8081 或其他端口。
如果Tomcat部署多个项目
复制 Tomcat 目录(多实例部署)------ 推荐
这是最"笨"但最有效的方法。与其折腾复杂的配置文件,不如直接运行两个独立的 Tomcat。
原理:你有两个独立的 Tomcat 文件夹,分别配置不同的端口,分别启动。它们互不干扰,一个崩了也不影响另一个。
操作步骤:
-
复制文件夹:
-
将你的 Tomcat 解压文件夹复制一份。
-
命名为
apache-tomcat-projectA(放项目A)。 -
命名为
apache-tomcat-projectB(放项目B)。
-
-
配置第一个 Tomcat (Project A):
-
打开
projectA/conf/server.xml。 -
设置 HTTP 端口为
8085(你之前已经做过了)。 -
注意:确认 Shutdown 端口(默认 8005)没有被占用。
-
-
配置第二个 Tomcat (Project B):
-
关键点:一个电脑上不能有两个程序监听同一个端口。 你不仅要改 HTTP 端口,还要改 Shutdown 端口。
-
打开
projectB/conf/server.xml,修改 3处 端口:
第一处:Shutdown 端口 (通常在第 22 行)
<Server port="8006" shutdown="SHUTDOWN">第二处:HTTP 访问端口 (通常在第 69 行)
<Connector port="8086" protocol="HTTP/1.1" ... />第三处:AJP 端口 (如果有的话,通常在第 116 行)
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" /> -
-
部署与启动:
-
把
A.war放入第一个 Tomcat 的 webapps。 -
把
B.war放入第二个 Tomcat 的 webapps。 -
分别去两个目录的
bin下点击startup.bat。
-
结果:
-
访问 A:
http://localhost:8085/A -
访问 B:
http://localhost:8086/B
修改 server.xml 配置多 Service(单实例多端口)
这是在一个 Tomcat 进程里开辟两个服务区域。虽然只启动一个黑窗口(JVM进程),但配置容易出错,且内存共享,一个项目内存溢出(OOM),两个端口都会挂掉。
原理 :server.xml 的结构是 Server -> Service -> Engine -> Host。我们可以复制一套 <Service> 标签。
操作步骤:
-
打开
conf/server.xml。 -
找到现有的
<Service name="Catalina"> ... </Service>标签结束的地方。 -
在它下面,复制粘贴一份完整的 Service 标签,并修改其中的核心参数。
修改后的 server.xml 结构大致如下:(根据自己的实际情况进行编写)
XML
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8085" protocol="HTTP/1.1" ... />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps" ...>
</Host>
</Engine>
</Service>
<Service name="Catalina2">
<Connector port="8086" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Engine name="Catalina2" defaultHost="localhost">
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
</Server>