Открыть сервис

Apache Tomcat

Apache Tomcat (часто называемый просто Tomcat) — это контейнер сервлетов с открытым исходным кодом, реализующий спецификации Jakarta Servlet, Jakarta Server Pages (JSP), Jakarta Expression Language и Jakarta WebSocket. Разрабатывается и поддерживается Apache Software Foundation. Tomcat является одним из наиболее распространённых веб-серверов и серверов приложений для Java-приложений, предоставляя среду для выполнения веб-компонентов, написанных на языке Java.

История

Создание и ранние версии

Проект Tomcat был начат в 1999 году в рамках Sun Microsystems как реализация спецификации сервлетов 2.2 и JSP 1.1. Исходный код был передан Apache Software Foundation, где проект стал частью проекта Jakarta. Первая публичная версия, Tomcat 3.0, вышла в 1999 году. Название «Tomcat» было выбрано как отсылка к животному, которое, по замыслу разработчиков, могло бы справиться с задачами, которые не под силу более крупным серверам.

Развитие и стандартизация

С выходом Tomcat 4.0 (2001 год) была реализована поддержка сервлетов 2.3 и JSP 1.2. Версия 5.0 (2002 год) представила поддержку сервлетов 2.4 и JSP 2.0, а также ввела архитектуру Catalina — новый контейнер сервлетов. В 2005 году вышла версия 5.5, которая стала первой, использующей Java 5.0.

В 2006 году был выпущен Tomcat 6.0, поддерживающий сервлеты 2.5 и JSP 2.1. Версия 7.0 (2011 год) добавила поддержку сервлетов 3.0, что позволило использовать асинхронные запросы и аннотации. Tomcat 8.0 (2014 год) реализовал сервлеты 3.1, а версия 8.5 (2016 год) — улучшенную поддержку HTTP/2 и TLS.

Современное состояние

В 2018 году вышла версия Tomcat 9.0, поддерживающая спецификации Jakarta Servlet 4.0, JSP 2.3, EL 3.0 и WebSocket 1.1. В 2021 году, после перехода Java EE в Eclipse Foundation и переименования в Jakarta EE, Tomcat 10.0 стал первой версией, поддерживающей Jakarta Servlet 5.0 и связанные с ним спецификации. Tomcat 10.1 (2022 год) реализует Jakarta Servlet 6.0 и является актуальной стабильной версией на 2024 год. Проект продолжает активно развиваться, выпуская регулярные обновления безопасности и исправления ошибок.

Архитектура и компоненты

Основные компоненты

Tomcat состоит из нескольких ключевых модулей:

  • Catalina — основной контейнер сервлетов, реализующий спецификации Jakarta Servlet. Он управляет жизненным циклом сервлетов, обрабатывает HTTP-запросы и генерирует ответы.
  • Jasper — движок JSP (JavaServer Pages), который компилирует JSP-файлы в сервлеты Java. Jasper поддерживает как статическую, так и динамическую компиляцию.
  • Coyote — HTTP-коннектор, обеспечивающий взаимодействие веб-сервера с контейнером сервлетов. Coyote поддерживает протоколы HTTP/1.1, HTTP/2, AJP (Apache JServ Protocol) и WebSocket.
  • Cluster — модуль для кластеризации, позволяющий объединять несколько экземпляров Tomcat для обеспечения отказоустойчивости и балансировки нагрузки.
  • Manager — веб-приложение для администрирования, позволяющее управлять развёрнутыми приложениями, сессиями и конфигурацией.

Структура каталогов

Стандартная установка Tomcat включает следующие каталоги:

  • bin/ — скрипты для запуска и остановки сервера (startup.sh, shutdown.sh, catalina.sh).
  • conf/ — конфигурационные файлы (server.xml, web.xml, context.xml, tomcat-users.xml).
  • lib/ — библиотеки Java (JAR-файлы), используемые сервером.
  • logs/ — файлы журналов (catalina.out, localhost.log).
  • webapps/ — каталог для развёртывания веб-приложений (WAR-файлов или директорий).
  • work/ — временные файлы, создаваемые Jasper при компиляции JSP.

Классификация и типы

По способу развёртывания

  • Автономный сервер — Tomcat запускается как самостоятельный процесс, обслуживая HTTP-запросы напрямую.
  • Встраиваемый сервер — Tomcat может быть встроен в Java-приложение с помощью библиотеки Tomcat Embed (например, в Spring Boot). В этом случае сервер запускается из кода приложения.
  • Интегрированный с веб-сервером — Tomcat может работать в связке с Apache HTTP Server или Nginx через протокол AJP, где внешний сервер обрабатывает статические файлы, а Tomcat — динамические запросы.

По версиям и спецификациям

Tomcat выпускается в нескольких линиях:

  • Tomcat 10.x — актуальная стабильная ветка, поддерживающая Jakarta Servlet 6.0 и Jakarta EE 10.
  • Tomcat 9.x — предыдущая стабильная ветка, поддерживающая Jakarta Servlet 4.0 (Java EE 8).
  • Tomcat 8.x — устаревшая ветка, поддерживающая сервлеты 3.1.
  • Tomcat 7.x — устаревшая ветка, поддерживающая сервлеты 3.0.

Применение

Веб-приложения на Java

Tomcat является стандартным контейнером для развёртывания Java-веб-приложений, включая:

  • Корпоративные системыCRM, ERP, системы управления контентом (CMS).
  • Порталы — веб-порталы, построенные на Java-фреймворках (Spring MVC, JavaServer Faces, Struts).
  • RESTful-сервисы — Tomcat часто используется для развёртывания REST API, написанных на Java.
  • Микросервисы — встраиваемый Tomcat популярен в микросервисной архитектуре, особенно в связке с Spring Boot.

Образовательные и тестовые среды

Благодаря простоте установки и настройки, Tomcat широко используется в учебных заведениях для обучения Java-программированию и веб-разработке. Он также применяется для локального тестирования веб-приложений перед развёртыванием на production-серверах.

Интеграция с другими технологиями

Tomcat часто используется в связке с:

  • Apache HTTP Server — для балансировки нагрузки и обработки статического контента.
  • Nginx — в качестве обратного прокси.
  • Базами данных — через JDBC-драйверы (MySQL, PostgreSQL, Oracle).
  • Системами мониторинга — JMX-интерфейс позволяет интегрировать Tomcat с Nagios, Zabbix, Prometheus.

Конфигурация и управление

Основные файлы конфигурации

  • server.xml — основной конфигурационный файл, определяющий порты, коннекторы, виртуальные хосты и глобальные настройки.
  • web.xml — дескриптор развёртывания, задающий настройки для всех веб-приложений (например, маппинг сервлетов, параметры сессий).
  • context.xml — конфигурация контекста (отдельного веб-приложения), включая источники данных (JNDI) и параметры.
  • tomcat-users.xml — файл для управления пользователями и ролями (используется в Manager и Host Manager).

Управление через веб-интерфейс

Tomcat включает встроенные веб-приложения:

  • Manager App — позволяет развёртывать, останавливать, запускать и удалять веб-приложения, а также просматривать состояние сессий.
  • Host Manager — управление виртуальными хостами (доступно в версиях с поддержкой виртуальных хостов).

Командная строка

Управление Tomcat осуществляется через скрипты:

  • startup.sh / startup.bat — запуск сервера.
  • shutdown.sh / shutdown.bat — остановка сервера.
  • catalina.sh run — запуск в интерактивном режиме (вывод логов в консоль).
  • catalina.sh stop — принудительная остановка.

Производительность и масштабирование

Оптимизация

Производительность Tomcat может быть улучшена за счёт:

  • Настройки пула потоков (maxThreads, minSpareThreads).
  • Использования асинхронной обработки запросов (NIO-коннектор).
  • Включения сжатия HTTP-ответов (compression).
  • Настройки кэширования статических ресурсов.
  • Использования HTTP/2 и TLS 1.3.

Кластеризация

Для обеспечения высокой доступности и масштабирования Tomcat поддерживает кластеризацию:

  • Репликация сессий — сессии пользователей синхронизируются между узлами кластера.
  • Балансировка нагрузки — с помощью Apache HTTP Server (mod_jk, mod_proxy_ajp) или Nginx.
  • Отказоустойчивость — при отказе одного узла запросы перенаправляются на другой.

Безопасность

Основные меры

  • Аутентификация и авторизация — встроенная поддержка базовой, дайджест-аутентификации, а также аутентификации на основе форм.
  • SSL/TLS — поддержка HTTPS через конфигурацию коннектора с сертификатами.
  • Управление пользователями — файл tomcat-users.xml позволяет задавать роли (manager-gui, admin-gui, manager-script).
  • Ограничение доступа — настройка прав доступа к веб-приложениям через web.xml (security-constraint).

Уязвимости и обновления

Как и любое программное обеспечение, Tomcat подвержен уязвимостям. Apache Software Foundation регулярно выпускает обновления безопасности. Рекомендуется использовать последние стабильные версии и следить за бюллетенями безопасности (CVE). Наиболее критичные уязвимости включают:

  • CVE-2020-1938 (Ghostcat) — уязвимость в протоколе AJP, позволяющая удалённое выполнение кода.
  • CVE-2021-41079 — уязвимость в коннекторе NIO, связанная с неправильной обработкой запросов.

Интересные факты

  • Tomcat является одним из самых популярных Java-серверов в мире, занимая значительную долю рынка среди контейнеров сервлетов.
  • Название «Tomcat» было предложено разработчиком Крейгом Маккланаханом, который хотел, чтобы проект ассоциировался с «кошкой, которая может справиться с любыми задачами».
  • Tomcat используется в таких крупных проектах, как Apache Struts, Spring Framework, Hibernate и многих других.
  • В 2019 году проект отметил 20-летие с момента основания.

Источники

  • Apache Tomcat Official Documentation (https://tomcat.apache.org/)
  • «Tomcat: The Definitive Guide» by Jason Brittain and Ian F. Darwin (O'Reilly Media)
  • «Java Servlet Specification» (JSR-369, Jakarta Servlet Specification)
  • CVE Database (https://cve.mitre.org/)
  • Apache Software Foundation Security Reports

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →