【Tomcat目录详解】关于Tomcat你还需要了解的详细内容

希望文章能给到你启发和灵感~

如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏 支持一下博主吧~

阅读指南

  • 开篇说明
  • 一、基础环境说明
    • [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

对于startupshutdown一定很熟悉不过了,我们日常用于快速启动和关闭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已经关闭;

相关推荐
捂月20 分钟前
Spring Boot 核心逻辑与工作原理详解
java·spring boot·后端
埋头编程~23 分钟前
【C++】踏上C++学习之旅(十):深入“类和对象“世界,掌握编程黄金法则(五)(最终篇,内含初始化列表、静态成员、友元以及内部类等等)
java·c++·学习
菜鸟起航ing36 分钟前
Java中日志采集框架-JUL、Slf4j、Log4j、Logstash
java·开发语言·log4j·logback
Nightselfhurt38 分钟前
RPC学习
java·spring boot·后端·spring·rpc
苹果醋341 分钟前
vue3 在哪些方便做了性能提升?
java·运维·spring boot·mysql·nginx
孔汤姆1 小时前
部署实战(二)--修改jar中的文件并重新打包成jar文件
java·pycharm·jar
Abladol-aj2 小时前
并发和并行的基础知识
java·linux·windows
清水白石0082 小时前
从一个“支付状态不一致“的bug,看大型分布式系统的“隐藏杀机“
java·数据库·bug
吾日三省吾码7 小时前
JVM 性能调优
java
弗拉唐8 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis