Apache Tomcat: веб-сервер и контейнер сервлетов¶
Apache Tomcat (также известный как Tomcat, ранее — Jakarta Tomcat) — это открытая реализация технологий Jakarta Servlet, Jakarta Server Pages (JSP), Jakarta Expression Language (EL) и Jakarta WebSocket, разрабатываемая Apache Software Foundation. Tomcat представляет собой веб-сервер и контейнер сервлетов, который используется для запуска веб-приложений, написанных на языке Java. Название проекта происходит от английского слова tomcat («кот»), что отражает стремление разработчиков создать самостоятельный, независимый компонент, способный работать без внешнего сервера приложений.
¶История
Проект Tomcat был создан в 1999 году инженером Джеймсом Дунканом Дэвидсоном (James Duncan Davidson) из компании Sun Microsystems. Изначально Tomcat задумывался как эталонная реализация спецификаций сервлетов и JSP для платформы Java 2 Enterprise Edition (J2EE). В октябре 1999 года проект был передан в некоммерческую организацию Apache Software Foundation, где стал частью проекта Jakarta.
Первая стабильная версия, Tomcat 3.0, была выпущена в 1999 году и реализовывала спецификацию Servlet 2.2 и JSP 1.1. В дальнейшем проект развивался параллельно с эволюцией Java-спецификаций:
- Tomcat 4.x (2001) — реализация Servlet 2.3 и JSP 1.2;
- Tomcat 5.x (2002) — Servlet 2.4 и JSP 2.0;
- Tomcat 6.x (2006) — Servlet 2.5 и JSP 2.1;
- Tomcat 7.x (2011) — Servlet 3.0, поддержка асинхронной обработки запросов;
- Tomcat 8.x (2014) — Servlet 3.1, поддержка HTTP/2 (с версии 8.5);
- Tomcat 9.x (2018) — первая версия, полностью перешедшая на пакеты
javax.servletв рамках спецификации Servlet 4.0; - Tomcat 10.x (2021) — переход на новое пространство имён
jakarta.*в связи с передачей Java EE в Eclipse Foundation; - Tomcat 11.x (2024) — реализация Servlet 6.0, JSP 4.0 и поддержка виртуальных потоков (Java 21+).
¶Архитектура и устройство
Tomcat построен на модульной архитектуре, состоящей из нескольких ключевых компонентов, определённых в спецификации Catalina (ядро контейнера сервлетов).
¶Основные компоненты
- Server — корневой компонент, представляющий весь экземпляр Tomcat. Управляет жизненным циклом сервисов.
- Service — промежуточный компонент, связывающий один или несколько коннекторов (Connector) с одним движком (Engine).
- Connector — компонент, отвечающий за приём входящих HTTP-запросов от клиентов. По умолчанию Tomcat использует коннектор Coyote, поддерживающий протоколы HTTP/1.1, HTTP/2 и AJP (Apache JServ Protocol).
- Engine — центральный компонент обработки запросов, который получает запросы от коннекторов и передаёт их на обработку вложенным хостам (Host).
- Host — виртуальный хост, представляющий доменное имя (например,
localhost). Позволяет размещать несколько веб-приложений на одном сервере. - Context — компонент, соответствующий отдельному веб-приложению. Каждый Context содержит собственные сервлеты, JSP-страницы и статические ресурсы.
- Wrapper — компонент, представляющий отдельный сервлет внутри Context.
¶Ключевые подсистемы
- Catalina — сервлетный контейнер, реализующий спецификации Jakarta Servlet и JSP.
- Coyote — HTTP-коннектор, обеспечивающий сетевую коммуникацию.
- Jasper — движок JSP, который компилирует JSP-страницы в Java-сервлеты при первом обращении.
- Cluster — подсистема для организации кластерной конфигурации с репликацией сессий.
¶Функциональные возможности
Tomcat поддерживает широкий набор технологий Java для веб-разработки:
- Jakarta Servlet — основной API для обработки HTTP-запросов и генерации ответов.
- Jakarta Server Pages (JSP) — технология динамической генерации HTML-контента.
- Jakarta Expression Language (EL) — язык выражений для упрощения доступа к данным в JSP.
- Jakarta WebSocket — поддержка двусторонней связи между клиентом и сервером.
- JNDI (Java Naming and Directory Interface) — доступ к внешним ресурсам, таким как источники данных (Data Sources) и очереди сообщений.
- JMX (Java Management Extensions) — мониторинг и управление состоянием сервера.
Дополнительно Tomcat включает в себя встроенный HTTP-клиент, поддержку SSL/TLS, механизм аутентификации (BASIC, DIGEST, FORM, CLIENT-CERT) и систему управления сессиями.
¶Конфигурирование
Конфигурация Tomcat осуществляется через XML-файлы, расположенные в каталоге conf:
- server.xml — основной файл конфигурации, определяющий порты, хосты, коннекторы и глобальные ресурсы JNDI.
- web.xml — дескриптор развёртывания, задающий параметры по умолчанию для всех веб-приложений (например, welcome-файлы, маппинг сервлетов, фильтры).
- context.xml — конфигурация отдельных контекстов (приложений) и глобальных ресурсов.
- tomcat-users.xml — учётные записи пользователей и роли для менеджера и административных интерфейсов.
- logging.properties — настройки ведения журналов на основе java.util.logging.
¶Применение
Tomcat является одним из самых распространённых серверов приложений для Java в мире. Основные сценарии использования:
- Развёртывание веб-приложений — запуск WAR-файлов, содержащих сервлеты, JSP и статические ресурсы.
- Образовательные цели — изучение сервлетов и JSP в учебных курсах по Java.
- Промышленная эксплуатация — использование в высоконагруженных системах, часто в связке с обратным прокси-сервером (например, Nginx или Apache HTTP Server) и балансировщиком нагрузки.
- Встраивание в приложения — использование Tomcat Embedded для запуска веб-сервера непосредственно внутри Java-приложения (например, в Spring Boot).
- Разработка и тестирование — локальный запуск приложений в среде разработки (IDE).
По данным различных опросов и статистики веб-серверов, Tomcat стабильно входит в пятёрку наиболее используемых веб-серверов в мире, уступая лишь Nginx, Apache HTTP Server, Cloudflare и Microsoft IIS.
¶Производительность и масштабирование
Tomcat поддерживает многопоточную обработку запросов. Начиная с версии 8.5, используется неблокирующий ввод-вывод (NIO), что повышает масштабируемость. В версии 11 добавлена поддержка виртуальных потоков (Project Loom), позволяющая обрабатывать значительно больше одновременных соединений при меньшем потреблении ресурсов.
Для горизонтального масштабирования Tomcat может быть объединён в кластер. Поддерживается репликация HTTP-сессий между узлами кластера через механизм DeltaManager или BackupManager, что обеспечивает отказоустойчивость и балансировку нагрузки.
¶Безопасность
Tomcat предоставляет несколько уровней безопасности:
- Ролевая модель доступа на основе стандартных механизмов Java EE.
- Поддержка SSL/TLS для шифрования трафика (включая современные версии протокола TLS 1.3).
- Механизмы защиты от межсайтового скриптинга (XSS) и подделки межсайтовых запросов (CSRF) на уровне приложения.
- Встроенный менеджер приложений (
/manager), доступ к которому ограничен через файлtomcat-users.xml.
¶Лицензия и дистрибуция
Tomcat распространяется под лицензией Apache License 2.0, которая разрешает свободное использование, модификацию и распространение как в открытых, так и в проприетарных проектах. Официальные релизы доступны для скачивания с сайта Apache Software Foundation. Существуют также сторонние сборки, включая дистрибутивы от различных вендоров и пакеты в репозиториях операционных систем (например, tomcat9 в Debian/Ubuntu).