Definicja #
Apache Tomcat to open-source'owy kontener Servlet i serwer webowy dla języka Java, rozwijany przez Apache Software Foundation od 1999 roku. Implementuje standardy Jakarta EE (dawniej Java EE):
- Jakarta Servlet — API do obsługi żądań HTTP w Javie; klasy dziedziczące po
HttpServlet - Jakarta Server Pages (JSP) — szablony HTML z wbudowanym kodem Java; kompilowane do Servletów
- WebSocket — obsługa połączeń WebSocket (od Tomcat 7)
- Jakarta Expression Language (EL)
Architektura Tomcat:
- Catalina — kontener Servlet; rdzeń Tomcata odpowiedzialny za obsługę żądań
- Coyote — konektor HTTP/HTTPS; obsługuje żądania na poziomie protokołu (HTTP/1.1, HTTP/2, AJP)
- Jasper — silnik JSP; kompiluje strony JSP do klas Java (Servlet)
- Cluster — mechanizm replikacji sesji dla środowisk wielowęzłowych
Tomcat vs pełne serwery EE (JBoss/WildFly, WebLogic, WebSphere):
- Tomcat implementuje tylko podzbiór Jakarta EE (Servlet/JSP/WebSocket) — jest lżejszy i prostszy
- JBoss/WildFly implementuje pełne Jakarta EE: EJB, JPA, CDI, JMS, JAX-RS — cięższy, ale kompletny
- Spring Boot domyślnie wbudowuje Tomcata jako embedded server — aplikacje uruchamiane jako JAR bez osobnej instalacji serwera
Tomcat jest najczęściej stosowanym serwerem aplikacyjnym Java — używany bezpośrednio lub jako embedded server w Spring Boot.
Zastosowania #
- Hosting aplikacji webowych Java — wdrożenie plików WAR z aplikacjami Spring MVC, JSF, Struts na serwerze Tomcat
- Embedded server w Spring Boot — Tomcat wbudowany w JAR aplikacji Spring Boot; uruchomienie przez
java -jar app.jarbez osobnej instalacji - Środowiska CI/CD — lekki serwer do automatycznego deploymentu i testów integracyjnych
- Reverse proxy za Nginx/Apache — Tomcat jako backend; Nginx obsługuje SSL i pliki statyczne, Tomcat dynamikę
- Migracja z legacy systemów Java — utrzymanie aplikacji JSP/Servlet napisanych dla starszych wersji Tomcata
Ścieżka nauki #
Tomcat jest kluczowym elementem wiedzy każdego Java developera pracującego z backendem webowym.
Zacznij od:
- Instalacja Tomcat: pobranie z tomcat.apache.org, struktura katalogów (
webapps/,conf/server.xml,logs/) - Wdrożenie pierwszej aplikacji: umieszczenie pliku WAR w
webapps/lub przez Tomcat Manager - Konfiguracja:
server.xml(porty, connectors),context.xml(datasources),web.xml - Tomcat Manager — interfejs webowy do zarządzania wdrożeniami
Następnie pogłębiaj:
- Spring Boot z embedded Tomcat — jak działa wbudowany serwer, konfiguracja przez
application.properties - Konfiguracja HTTPS: certyfikat SSL w Tomcat lub terminacja SSL na Nginx/Apache jako reverse proxy
- Tuning wydajności: ustawienia puli wątków (
maxThreads), connection pool (DBCP/HikariCP) - Klastry Tomcat: replikacja sesji, load balancing przez mod_jk lub mod_proxy_balancer
FAQ #
- Czym różni się Tomcat od JBoss/WildFly?
- Tomcat implementuje tylko podzbiór Jakarta EE: Servlet, JSP i WebSocket — jest lżejszy i prostszy. JBoss/WildFly implementuje pełne Jakarta EE: EJB, CDI, JPA, JMS, JAX-RS — kompletny serwer aplikacyjny. Spring Boot używa Tomcata jako domyślnego embedded servera. JBoss stosuje się przy pracy z pełnym stackiem Jakarta EE lub legacy systemami EJB.
- Czy Spring Boot wymaga instalacji Tomcata?
- Nie — Spring Boot domyślnie wbudowuje Tomcata w plik JAR aplikacji. Wystarczy uruchomić java -jar app.jar bez osobnej instalacji serwera. Można zmienić embedded server na Jetty lub Undertow przez konfigurację pom.xml/build.gradle. Wbudowany Tomcat obsługuje HTTP, HTTPS i WebSocket.
- Jakie są aktualne wersje Tomcata i co wybierać?
- Aktywnie rozwijane wersje to Tomcat 10.x (Jakarta EE 9+, nowe namespace jakarta.*) i Tomcat 11.x. Tomcat 9.x używa starszego namespace javax.* (Java EE) i jest szeroko stosowany z legacy Spring. Ważna zmiana: w Tomcat 10 paczki zmieniły namespace z javax.servlet na jakarta.servlet — migracja wymaga aktualizacji importów.
- Jak wdrożyć aplikację na Tomcat?
- Metody wdrożenia: 1) Skopiowanie pliku WAR do katalogu webapps/ — Tomcat automatycznie wykryje i wdroży. 2) Tomcat Manager (interfejs webowy /manager/html) — upload WAR przez przeglądarkę. 3) Maven Tomcat Plugin — wdrożenie przez mvn tomcat7:deploy. 4) Skrypty CI/CD (GitHub Actions, Jenkins) kopiujące WAR przez SSH lub API Managera.