Apache Tomcat is an open-source servlet container and web server from the Apache Software Foundation. It implements the Jakarta Servlet, JSP, Expression Language and WebSocket specifications, which makes it the runtime underneath a very large share of Java web applications — directly, or embedded inside Spring Boot, where the same connector and thread pool settings apply even though there is no standalone installation to configure.
A running Tomcat instance is a small hierarchy of components defined in server.xml: a Server containing a Service, which binds one or more Connectors to a single Engine, which contains Hosts, which contain Contexts — one per deployed application. That hierarchy is the operational map. The Connector decides protocol, port, thread pool size, keep-alive and TLS behaviour, and is where most capacity problems live. The Host decides virtual hosting and automatic deployment. The Context decides classloading, session handling and resource lookups for a single application.
For an infrastructure team, Apache Tomcat is a JVM process with web-server characteristics, and it has to be operated as both. That means connector and executor sizing rather than defaults, heap and garbage collection settings chosen from measurement, deployment through the Manager application or a build pipeline rather than by hand, TLS terminated either at Tomcat or in front of it, access and catalina logging that survives an incident review, and clustering with session replication when a single instance is no longer acceptable. Tomcat is usually run behind NGINX or the Apache HTTP Server, so the AJP and HTTP proxy path — and preserving the real client address across it — is part of the same job.
Why this skill matters now
Java remains the backbone of enterprise application estates, and Tomcat is where most of it runs. The operational reality is that Tomcat is rarely anyone's declared specialism — it is a thing that already exists, running with the settings it shipped with, until it becomes the reason a release cannot be deployed or a service will not stay up.
The recurring failures are all sizing and configuration. maxThreads left at the default while the connection pool behind it is smaller, so requests queue in the wrong place. A heap that has never been sized against the actual live set, producing garbage collection pauses that look to everyone else like network latency. An AJP connector left open on all interfaces. Session replication switched on across a cluster without anyone measuring what it costs, so adding a node makes things slower. The Manager application reachable from outside with a weak account. Applications that leak classloaders on redeploy, so the tenth deploy of the day exhausts metaspace. Each of these is a known problem with a known fix that nobody was taught.
The embedded case has made this more urgent rather than less. Spring Boot ships Tomcat inside the artifact, which means the connector, thread pool and TLS settings that used to live in server.xml now live in application properties — and are configured by developers who have never operated a servlet container. Teams that can reason about connectors, threads, sessions, classloading and the JVM underneath are exactly what platform and middleware roles are asking for.