Tomcat 介绍-01

Tomcat 详细介绍

一、Tomcat 概述

Apache Tomcat 是一个开源的 Java Servlet 容器,实现了 Java Servlet、JavaServer Pages (JSP)、Java Expression Language 和 Java WebSocket 技术。它是 Apache 软件基金会的一个顶级项目,是开发和部署 Java Web 应用程序的流行选择。

主要特点:

  • 轻量级且高效

  • 完全符合 Java EE (现 Jakarta EE) 规范

  • 高度可配置和可扩展

  • 良好的社区支持和文档

  • 跨平台(可在任何支持 Java 的平台上运行)

二、Tomcat 目录结构

典型的 Tomcat 安装目录结构如下:

apache-tomcat-x.y.z/
├── bin/                # 可执行脚本和程序
├── conf/              # 配置文件
├── lib/               # 共享库文件
├── logs/              # 日志文件
├── temp/              # 临时文件
├── webapps/           # 部署的Web应用程序
├── work/              # 工作目录,存放JSP编译后的类文件
└── LICENSE
└── NOTICE
└── README.md

详细目录说明:

  1. bin 目录

    • 包含启动和停止 Tomcat 的脚本

    • 主要文件:

      • startup.sh / startup.bat - 启动 Tomcat

      • shutdown.sh / shutdown.bat - 停止 Tomcat

      • catalina.sh / catalina.bat - 主控制脚本

      • version.sh / version.bat - 显示版本信息

  2. conf 目录

    • 包含 Tomcat 的主要配置文件

    • 重要文件:

      • server.xml - 主配置文件,定义服务器设置

      • web.xml - 默认的Web应用程序部署描述符

      • context.xml - 默认的上下文配置

      • tomcat-users.xml - 用户、角色和密码配置

      • logging.properties - 日志系统配置

  3. lib 目录

    • 包含 Tomcat 服务器和所有 Web 应用程序共享的 JAR 文件

    • 包括 Servlet API、JSP API 等核心库

  4. logs 目录

    • 存储 Tomcat 运行时的日志文件

    • 主要日志文件:

      • catalina.out - 主日志输出

      • localhost.log - 本地主机相关日志

      • localhost_access_log.*.txt - 访问日志

  5. webapps 目录

    • 默认的 Web 应用程序部署目录

    • 每个子目录或 WAR 文件代表一个 Web 应用

    • 包含一些默认应用:

      • ROOT - 根应用(访问 / 时显示)

      • docs - Tomcat 文档

      • examples - Servlet 和 JSP 示例

      • host-manager 和 manager - 管理应用

  6. work 目录

    • Tomcat 的工作目录

    • 存储 JSP 编译后的 Servlet 类和临时文件

    • 可以安全删除,Tomcat 会在需要时重新生成

  7. temp 目录

    • 存储临时文件

    • 用于文件上传等临时操作

三、Tomcat 核心组件

Tomcat 的核心架构基于以下组件:

  1. Server - 代表整个 Tomcat 容器

  2. Service - 包含一个或多个 Connector 和一个 Engine

  3. Connector - 处理与客户端的通信(HTTP/1.1, AJP 等)

  4. Engine - 请求处理管道,包含多个 Host

  5. Host - 虚拟主机,包含多个 Context

  6. Context - 代表一个 Web 应用程序

Server -》Service -》Connector -》Host -》Context 

四、Tomcat 配置文件详解

1. server.xml

主配置文件,主要元素:(可修改访问端口信息,可配置多个connector)

<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1" ... />
    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost" appBase="webapps" ...>
        <Context ... />
      </Host>
    </Engine>
  </Service>
</Server>

server.xml 是 Tomcat 的主配置文件,而 Connector(连接器)是其中最重要的组件之一,负责处理客户端与 Tomcat 之间的通信。下面我将详细介绍 Connector 的配置。

一、Connector 基本概念

Connector 是 Tomcat 与外界通信的接口,它:

  • 监听特定端口上的请求

  • 将请求传递给适当的容器(Engine)

  • 将响应返回给客户端

  • 支持多种协议(HTTP/1.1, AJP, HTTP/2等)

二、Connector 类型

Tomcat 支持多种 Connector 实现:

  1. HTTP Connector - 处理 HTTP/1.1 请求

    • 默认端口:8080

    • 类名:org.apache.catalina.connector.http.HttpConnector (Tomcat 4)

    • 现代 Tomcat 使用:org.apache.catalina.connector.Connector

  2. AJP Connector - Apache JServ Protocol,用于与前端 Web 服务器(如 Apache HTTPD)集成

    • 默认端口:8009

    • 类名:org.apache.coyote.ajp.AjpProtocol

  3. HTTP/2 Connector - 支持 HTTP/2 协议

    • 需要基于 NIO 或 APR/native 实现

三、HTTP Connector 详细配置

以下是一个典型的 HTTP Connector 配置示例:

<Connector 
    port="8080" 
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"
    maxThreads="200"
    minSpareThreads="10"
    acceptCount="100"
    maxConnections="10000"
    compression="on"
    compressionMinSize="2048"
    compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
    URIEncoding="UTF-8"
    useBodyEncodingForURI="true"
    enableLookups="false"
    server="Unknown" />

关键属性说明:

1. 基本属性

  • port: 监听的端口号(必需)

  • protocol: 协议类型,如 "HTTP/1.1"(默认)

    • 可以指定具体实现类:org.apache.coyote.http11.Http11NioProtocol

  • address: 绑定到特定IP地址(默认监听所有地址)

  • server: 隐藏Tomcat版本信息,设置响应头中的Server字段

2. 连接处理

  • connectionTimeout: 连接超时时间(毫秒),默认60000(1分钟)

  • keepAliveTimeout: Keep-Alive连接超时时间(毫秒)

  • maxKeepAliveRequests: 一个连接上允许的最大请求数(默认100)

3. 线程池配置

  • maxThreads: 最大工作线程数(默认200)

  • minSpareThreads: 最小空闲线程数(默认10)

  • acceptCount: 当所有线程都在使用时,传入连接请求的最大队列长度(默认100)

  • maxConnections: 在任何给定时间服务器接受和处理的最大连接数(默认10000)

4. 性能优化

  • compression: 是否启用压缩(on/off/force)

  • compressionMinSize: 启用压缩的最小数据大小(字节)

  • compressableMimeType: 可压缩的MIME类型列表

  • disableUploadTimeout: 上传时是否禁用超时(默认false)

5. 编码与安全

  • URIEncoding: URI字符编码(默认ISO-8859-1,推荐UTF-8)

  • useBodyEncodingForURI: 是否使用请求体编码解析URI参数

  • enableLookups: 是否对远程客户端执行DNS查询(影响性能,建议false)

  • xpoweredBy: 是否显示X-Powered-By头(建议false)

四、AJP Connector 配置示例

<Connector 
    port="8009" 
    protocol="AJP/1.3"
    redirectPort="8443"
    secretRequired="false"
    address="127.0.0.1"
    tomcatAuthentication="false" />

AJP 特定属性:

  • secret: AJP协议密钥(安全考虑建议设置)

  • secretRequired: 是否要求密钥(默认true)

  • tomcatAuthentication: 是否使用Tomcat认证(默认true)

五、高级 Connector 配置

1. 使用 NIO 连接器

<Connector 
    port="8080" 
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="200"
    ... />

NIO (Non-blocking I/O) 提供更好的并发性能。

2. 使用 APR/native 连接器

<Connector 
    port="8080" 
    protocol="org.apache.coyote.http11.Http11AprProtocol"
    ... />

需要安装 APR 库,提供最佳性能。

3. SSL/TLS 配置

<Connector 
    port="8443" 
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="150"
    SSLEnabled="true"
    scheme="https"
    secure="true">
    <SSLHostConfig>
        <Certificate 
            certificateKeystoreFile="conf/localhost-rsa.jks"
            certificateKeystorePassword="changeit"
            type="RSA" />
    </SSLHostConfig>
</Connector>

六、Connector 性能调优建议

  1. 根据负载调整线程池:

    • maxThreads:根据CPU核心数和应用类型设置(通常200-800)

    • acceptCount:设置合理的等待队列大小

  2. 连接超时:

    • 生产环境适当减少connectionTimeout(如20000毫秒)

  3. 启用压缩:

    • 对文本内容启用压缩可显著减少传输量

  4. 禁用DNS查询:

    • 设置enableLookups="false"提高性能

  5. 选择合适的协议实现:

    • 高并发场景使用NIO或APR/native

七、常见问题解决

  1. 端口冲突:

    • 确保端口未被其他程序占用

    • 检查防火墙设置

  2. 性能瓶颈:

    • 监控线程使用情况调整maxThreads

    • 检查acceptCount是否过小导致请求被拒绝

  3. 内存泄漏:

    • 长连接应用适当减少connectionTimeout

    • 监控maxConnections

Connector 是 Tomcat 性能调优的关键组件,合理的配置可以显著提高服务器的并发处理能力和稳定性。生产环境中应根据实际负载情况和硬件配置进行细致的调优。

 

2. web.xml

定义默认的 Servlet、MIME 类型映射、会话配置等。

3. context.xml

定义 Context 级别的配置,如数据源、环境变量等。

五、Tomcat 部署方式

  1. 自动部署 - 将 WAR 文件或解压的目录放入 webapps 目录

  2. 手动部署 - 通过编辑 server.xml 或创建 context.xml 文件

  3. 使用 Manager 应用 - 通过 Web 界面部署

六、Tomcat 管理工具

  1. Manager 应用 - 提供基本的部署和管理功能

    • 访问路径:/manager/html

    • 需要配置 tomcat-users.xml 中的用户角色

  2. Host Manager - 管理虚拟主机

    • 访问路径:/host-manager/html

七、性能调优建议

  1. JVM 调优 - 调整内存参数(-Xms, -Xmx)

  2. 连接器调优 - 调整 maxThreads, acceptCount 等参数

  3. 禁用不需要的服务 - 如 AJP 连接器(如果不使用)

  4. 启用压缩 - 减少传输数据量

  5. 使用 APR/Native 连接器 - 提高性能

八、安全建议

  1. 删除默认应用(docs, examples, manager 等)如果不需要

  2. 限制 Manager 应用的访问

  3. 定期更新 Tomcat 版本

  4. 使用安全领域(Realm)进行认证

  5. 配置适当的文件系统权限

Tomcat 是一个强大而灵活的 Servlet 容器,通过了解其目录结构和配置文件,可以更好地管理和优化 Java Web 应用程序的部署和运行。

posted @ 2025-06-06 12:42  Shafir莎菲尔  阅读(63)  评论(0)    收藏  举报