希望文章能给到你启发和灵感~
如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏 支持一下博主吧~
阅读指南
- 开篇说明
- 一、基础环境说明
-
- [1.1 硬件环境](#1.1 硬件环境)
- [1.2 软件环境](#1.2 软件环境)
- 二、Tomcat的文件结构
-
- [2.1 bin目录](#2.1 bin目录)
- [2.1.1 startup和shutdown](#2.1.1 startup和shutdown)
- [2.1.2 Catalina](#2.1.2 Catalina)
- [2.1.3 service.bat(Windows)](#2.1.3 service.bat(Windows))
- [2.2 conf目录](#2.2 conf目录)
-
- [2.2.1 server.xml](#2.2.1 server.xml)
- [2.2.2 web.xml (很少改动)](#2.2.2 web.xml (很少改动))
- [2.2.3 tomcat-users.xml](#2.2.3 tomcat-users.xml)
- [2.2.4 logging.properties](#2.2.4 logging.properties)
- [2.3 lib目录(基本不动)](#2.3 lib目录(基本不动))
- [2.4 logs目录](#2.4 logs目录)
- [2.5 webapps目录](#2.5 webapps目录)
- [2.6 work目录](#2.6 work目录)
- [2.7 temp目录](#2.7 temp目录)
- 三、最后
开篇说明
Tomcat目前仍然活跃在开发人员的日常中,但是我们是否对他有更深的了解,还是只是知道如何安装配置和启动他就够了呢?本篇作为自己的总结和记录,希望有些东西是你需要的;
一、基础环境说明
考虑环境因素,大家适当的对比自己的软硬件环境情况分析~请仔细阅读硬件、软件环境
1.1 硬件环境
Windows 11 专业版
1.2 软件环境
开发工具:Tomcat 9.0
二、Tomcat的文件结构
文件目录结构,主要分为:bin,conf,lib,logs,temp,webapps,work,Tomcat中的文件目录结构相对清晰,每个目录都有其
特定的功能
和用途
;
2.1 bin目录
bin目录下存放了Tomcat的启动和关闭脚本文件;这里有几个
重要的文件
我们必须知道;
- .sh结尾的文件:Linux平台或Mac上的启动和关闭脚本。
- .bat结尾的文件:Windows平台上的启动和关闭脚本。
- catalina.sh:Tomcat的核心启动脚本,可以在其中设置JVM参数。
- startup.sh和shutdown.sh:分别用于启动和关闭Tomcat服务器。
- service.bat:用于windows注册tomcat服务使用的。
2.1.1 startup和shutdown
对于startup
和shutdown
一定很熟悉不过了,我们日常用于快速启动和关闭tomcat服务器必须要用到的。至于后缀bat,还是用sh这个取决你的操作系统类型;
2.1.2 Catalina
关于Catalina
文件,他也是tomcat的启动脚本
,和startup
的主要区别就在于,后者专注启动
,而前者在启动时还能通过配置参数
来实现其他目的;
例如,这里我用catalina来启动Tomcat,我就会这样做:输入catalina.bat start
(windows系统)
这里是在tomcat的bin目录
下执行的,如果你已经配置了环境变量
,那么你可以在任意位置执行这个操作;同理,我们也可以通过catalina.bat stop
来停止服务;
那么如何进行参数的配置?
通常的做法,是通过修改catalina文件,来进行相关的参数配置,而参数配置我们比较常见的就是JVM等相关的内容;例如在catalina文件中,我这里
-Xms512m
设置了JVM的初始堆内存
为512MB,-Xmx1024m
设置了最大堆内存
为1024MB,-XX:+UseG1GC
启用了G1垃圾回收器
,-Duser.timezone=Asia/Shanghai
设置了JVM的时区
修改后,重启tomcat让配置生效;这里对比一下配置前后的区别;
程序正常启动,并且我们能在控制台看到我们所配置的参数信息;
需要注意的是
,实际情况中我们并不建议直接在catalina中修改
,这对我们tomcat服务的升级和维护并不友好,因此我们建议通过setenv配置文件
来进行配置参数;为啥是setenv?我们看看catalina的配置文件,这段告诉我们脚本在启动时会做一个判断,如果存在这个文件就会去自动调用;现在的tomcat目录下通常都不存在这个文件,我们需要自己手动创建一个;
创建完setenv(Windows中就是setenv.bat,mac/linux中就是setenv.sh),然后根据不同系统在里面添加上配置即可;语法需要注意会略有不同;
bash
// mac或linux
export JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -Duser.timezone=Asia/Shanghai"
bash
// windows
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:+UseG1GC -Duser.timezone=Asia/Shanghai
2.1.3 service.bat(Windows)
service文件,这个文件我们只会在windows中看见,通常用于我们将Tomcat服务注册为系统服务用的;主要的用法进入bin目录,执行service.bat install + 自定义服务名;
接着我们就能在windows服务中看到,此时是没有启动的,可以点击启动,也能重启计算机他会随着下次电脑的重启而自启动;
2.2 conf目录
conf目录存放Tomcat服务器的各种全局配置文件。
- server.xml:Tomcat的主配置文件,包含Service、Connector、Engine、Host等组件的配置信息。
- web.xml:遵循Servlet规范标准的配置文件,用于配置servlet并为所有Web应用程序提供默认配置信息。
- tomcat-users.xml:Realm认证时用到的相关角色、用户和密码等信息。
- context.xml:所有host的默认配置信息。
- catalina.policy:Java相关的安全策略配置文件。
- catalina.properties:Tomcat内部package的定义及访问相关的控制文件。
- logging.properties:Tomcat日志记录器相关的配置信息。
2.2.1 server.xml
在Apache Tomcat的server.xml配置文件中,你可以配置多个端口
,但其中最常见的包括HTTP服务的端口
(默认是8080),AJP服务的端口
(默认是8009),以及SSL/TLS(即HTTPS)的端口
(如果启用的话,默认可能是8443,但这取决于具体配置)
【1】http连接器端口
HTTP连接器用于处理进入Tomcat的HTTP请求。默认情况下,Tomcat监听8080端口。你可以通过修改标签的port属性来改变这个端口。
【2】AJP连接器端口
AJP(Apache JServ Protocol)连接器用于Tomcat与Apache HTTP服务器之间的通信,特别是当使用mod_jk模块时。默认情况下,Tomcat监听8009端口。
AJP目前我们其实不怎么使用,因为nginx已经可以替代它;它一开始是默认注释的,根据自己需要来开启
【3】SSL/TLS(HTTPS)连接器端口
如果你打算让Tomcat处理HTTPS请求,你需要配置一个SSL/TLS连接器。这涉及到指定SSL证书的密钥库(keystore)和密码等信息
这个也是默认注释的,当你需要用到https请求的时候,再去开启;certificateKeystoreFile和certificateKeystorePassword应该指向你的密钥库文件和它的密码。这些值需要根据你的实际密钥库文件和密码进行更改
2.2.2 web.xml (很少改动)
Tomcat安装目录下的conf目录
中的web.xml文件
是全局配置文件
,它定义了Tomcat服务器范围内默认的Servlet和MIME类型映射等。通常,这个全局的web.xml文件不需要由开发者进行频繁的修改,除非你需要为整个Tomcat服务器添加全局的Servlet映射、过滤器(Filter)、监听器(Listener)等;
一些配置是可以通过注解(Annotations)来完成,这减少了对web.xml文件的依赖;
2.2.3 tomcat-users.xml
bash
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<!--
注意:默认情况下,Tomcat Manager是禁用的,并且没有设置任何用户。
要启用Tomcat Manager,并为其设置用户,你需要取消以下注释,
并根据需要修改用户名、密码和角色。
-->
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
<user username="admin" password="admin123" roles="manager-script"/>
</tomcat-users>
2.2.4 logging.properties
通过编辑这个文件,你可以定义日志的级别、格式、输出位置等。这对于监控和调试 Tomcat 服务器及其部署的应用程序非常有用。
bash
# 设置日志的根级别和处理器
handlers = 1catalina.org.apache.juli.FileHandler, 2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 4host-manager.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
# 设置根日志级别
.level = INFO
# 设置特定类别的日志级别
org.apache.catalina.level = INFO
org.apache.catalina.startup.level = FINE
org.apache.catalina.session.level = FINE
org.apache.catalina.util.lifecycle.level = FINE
# 为不同的处理器(文件处理器和控制台处理器)设置格式和文件路径
# 文件处理器示例
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.
3manager.org.apache.juli.FileHandler.level = FINE
3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.FileHandler.prefix = manager.
4host-manager.org.apache.juli.FileHandler.level = FINE
4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.FileHandler.prefix = host-manager.
# 控制台处理器
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
# 设置日志文件的编码
org.apache.juli.FileHandler.encoding = UTF-8
# Java 类的日志级别
org.apache.jasper.level = INFO
org.apache.coyote.level = INFO
2.3 lib目录(基本不动)
功能:存放Tomcat运行所需的库文件(JAR文件)。
注意:虽然某些旧版本的Tomcat或特定配置可能会将JAR文件存放在其他如common/lib、server/lib或shared/lib目录下,但现代版本的Tomcat更倾向于将核心库文件统一放在lib目录下。
2.4 logs目录
功能:存放Tomcat执行时的日志文件。
内容:包括Tomcat启动、运行和关闭过程中的各种日志信息,如catalina.out、localhost.log等
这里catalina.2024-7-10是通过日志滚动策略生成的,用于记录Catalina容器的日常运行日志;
locahost.2024-7-10,localhost_access_log.2024-7-10分别记录了应用程序的日志信息和访问日志
;
host-manager日志是监控和管理Tomcat服务器上虚拟主机的重要工具。通过分析这些日志文件,管理员可以了解虚拟主机的使用情况,以及是否存在潜在的问题或安全风险
而通常我们日常排查日志时,不是选择Catalina.log/Catalina.out/appName.log等;
2.5 webapps目录
功能:Tomcat的主要Web发布目录,用于存放Web应用程序。
内容:默认情况下,将Web应用文件放在此目录下即可发布应用。Tomcat会自动扫描此目录下的应用程序并进行部署。
webapps的特点是:
【1】自动部署:Tomcat 会定期扫描 webapps 目录下的所有内容。当你将一个 WAR 文件
(例如 myapp.war)放入 webapps 目录时,Tomcat 会自动检测到这个文件,并尝试部署它
。如果文件是一个 WAR 包,Tomcat 会首先解压这个文件,然后按照解压后的目录结构来部署应用程序
【2】管理:通过直接操作 webapps 目录下的文件,你可以很方便地管理 Tomcat 上的 Web 应用程序。例如,你可以通过删除目录来卸载应用程序
,或者通过替换 WAR 文件
来更新应用程序。
【3】自定义部署路径:Tomcat 默认将 Web 应用程序部署在 webapps 目录下
,但你也可以通过修改 Tomcat 的配置文件(如 server.xml
)来指定其他目录作为应用程序的部署路径。这个提一下,也很少有看到另外定义路径;但也不是不行;
bash
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- 配置一个Context来指定其他目录为应用程序的部署路径 -->
<Context path="/myapp" docBase="/path/to/your/application" reloadable="true">
<!-- 这里可以添加更多的Context配置 -->
</Context>
<!-- 其他Host配置 -->
</Host>
2.6 work目录
功能:存放JSP编译后产生的class文件以及Servlet的临时文件。
注意:清空此目录下的内容,并重启Tomcat,可以达到清除JSP和Servlet编译后缓存的效果。
简单的来说,work的作用就是JSP编译和缓存来提高tomcat的性能,主要体现在响应速度上;
注意需要定期清理该目录,长期tomcat的运行和更新会导致该目录越来愈大;占用大量的磁盘空间;
2.7 temp目录
功能:存放Tomcat运行过程中产生的临时文件。
注意:这些临时文件通常用于支持Tomcat的内部操作,如会话管理、文件上传等。
这个目录有点类似于work目录,也是通过缓存临时文件来提高应用程序的性能
三、最后
【1】在进行相关配置之后,往往是需要重启Tomcat才能生效的;
【2】temp和work目录虽然是缓存文件和临时文件,但是进行清除的时候仍然需要注意做好备份,并且确认是否这些文件还被其他应用进程所占用;
【3】shutdown执行时,并不是立即停止,而是尝试优雅的关闭Tomcat,这个过程根据情况可能会持续一段时间才能停止;可通过查看tomcat端口情况来判断是否Tomcat已经关闭;