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


    希望文章能给到你启发和灵感~
    如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏 支持一下博主吧~

    开篇说明

    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),然后根据不同系统在里面添加上配置即可;语法需要注意会略有不同;

    // mac或linux
    export JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -Duser.timezone=Asia/Shanghai"
    
    // 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

    <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 服务器及其部署的应用程序非常有用。

    # 设置日志的根级别和处理器  
    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)来指定其他目录作为应用程序的部署路径。这个提一下,也很少有看到另外定义路径;但也不是不行;

    <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已经关闭;

  • 相关阅读:
    docker-compose在虚拟机上搭建zookeeper+kafka3.0.0集群
    第十五届全国交通运输领域青年学术会议,和鲸 Heywhale 携手龙船科技联合发布科研服务解决方案
    学会安装Redis数据库到服务器或计算机(Windows版)
    JSON模块
    计算机毕业论文java毕业设计选题基于springboot幼儿园管理系统
    69.Qt 实现Https ssl证书与内网服务器ip进行双向认证
    RTP/RTCP 协议讲解
    虹科示波器 | 汽车免拆检修 | 2010款江铃陆风X8车发动机怠速抖动、加速无力
    【统计和图形分析】上海道宁为您带来测试、分析、改进和控制自身服务、交易和制造流程的强大工具——SigmaXL
    最新CLion + STM32 + CubeMX 开发环境搭建
  • 原文地址:https://blog.csdn.net/qq_39611212/article/details/140325105