当 Tomcat 部署一个 WAR 包时,它会按照一定的顺序和规则来处理和加载应用。以下是 Tomcat 部署 WAR 包时的主要步骤和查找顺序:
1. 检查 webapps
目录
Tomcat 会定期检查 webapps
目录,寻找新的 WAR 文件或目录。如果发现新的 WAR 文件或目录,Tomcat 会尝试部署它们。
2. 解压 WAR 文件
如果发现一个新的 WAR 文件,Tomcat 会自动解压该文件到 webapps
目录下的一个同名文件夹中。例如,bs-tomcat-servlet-jsp.war
会被解压到 webapps/bs-tomcat-servlet-jsp
文件夹中。
3. 加载 web.xml
文件
Tomcat 会加载应用的 web.xml
文件,该文件位于 WEB-INF
目录下。web.xml
文件定义了应用的配置信息,包括:
Servlet 映射:定义了哪些 URL 映射到哪些 Servlet。
过滤器:定义了哪些过滤器应用于哪些 URL。
监听器:定义了哪些监听器在应用启动时被调用。
欢迎文件:定义了默认的欢迎文件(如
index.html
或index.jsp
)。
4. 初始化应用
Tomcat 会初始化应用,包括:
加载类:加载应用的类文件。
初始化 Servlet:调用每个 Servlet 的
init()
方法。初始化监听器:调用每个监听器的
contextInitialized()
方法。
5. 处理请求
当客户端发送请求到 Tomcat 时,Tomcat 会根据 web.xml
文件中的配置来处理请求。具体步骤如下:
解析请求:提取请求的上下文路径和 URI。
匹配 Servlet:根据
web.xml
文件中的配置,找到对应的 Servlet。调用 Servlet:调用 Servlet 的
doGet()
或doPost()
方法来处理请求。生成响应:Servlet 生成响应内容,Tomcat 将响应发送回客户端。
6. 日志记录
Tomcat 会记录部署和运行过程中的日志信息,这些信息可以帮助你排查问题。日志文件通常位于 logs
目录下,常见的日志文件包括:
catalina.out
:Tomcat 的主日志文件。localhost.[date].log
:特定主机的日志文件。
7. 自动部署和热部署
Tomcat 支持自动部署和热部署:
自动部署:当
autoDeploy
属性设置为true
时,Tomcat 会自动部署新的 WAR 文件或目录。热部署:当
reloadable
属性设置为true
时,Tomcat 会监视应用的类文件和配置文件的变化,并在文件变化时自动重新加载应用。
示例
假设你有一个名为 bs-tomcat-servlet-jsp.war
的 WAR 文件,部署过程如下:
将 WAR 文件放入
webapps
目录:D:\Tools\apache-tomcat-10.1.39\webapps\bs-tomcat-servlet-jsp.war
Tomcat 自动解压 WAR 文件:
D:\Tools\apache-tomcat-10.1.39\webapps\bs-tomcat-servlet-jsp
加载
web.xml
文件:D:\Tools\apache-tomcat-10.1.39\webapps\bs-tomcat-servlet-jsp\WEB-INF\web.xml
初始化应用:
加载类文件。
初始化 Servlet 和监听器。
处理请求:
客户端请求:
http://localhost:8080/bs-tomcat-servlet-jsp
Tomcat 根据
web.xml
文件中的配置处理请求。
总结
Tomcat 部署 WAR 包时,会按照以下顺序进行:
检查
webapps
目录。解压 WAR 文件。
加载
web.xml
文件。初始化应用。
处理请求。
记录日志。
通过这些步骤,Tomcat 能够正确部署和运行你的 Web 应用。如果遇到问题,可以参考日志文件中的错误信息进行排查。