
Chapter 3. Servlet Container Overview
In the last chapter, we noted that the Java Enterprise Edition can be considered to be nothing more than a set of specifications, or interfaces, for which service providers are required to provide implementations.
While it is the actual implementation that does all the work, these specifications ensure that each implementation can assume that all its other collaborating pieces work as described by their interfaces. In theory, this allows complex software platforms (such as application servers) to be assembled from constituent implementations, each of which is sourced from a different vendor.
In practice, it is highly unlikely that you will interface an EJB container from WebSphere and a JMS implementation from WebLogic, with the Tomcat servlet container from the Apache foundation, but it is at least theoretically possible.
Note that the term 'interface', as it is used here, also encompasses abstract classes. The specification's API might provide a template implementation whose operations are defined in terms of some basic set of primitives that are kept abstract for the service provider to implement. For instance, in Chapter 2, we noted that the servlet hierarchy is made up of the Servlet
interface, and the GenericServlet
and HttpServlet
abstract classes within the javax.servlet
package.
A service provider is required to make available concrete implementations of these interfaces and abstract classes. For example, the HttpSession
interface is implemented by Tomcat in the form of org.apache.catalina.session.StandardSession
.
Let's return to the image of the Tomcat container that we saw in Chapter 1.

As was stated in Chapter 1, the objective of this book is to cover the primary request processing components that are present in this image. Advanced topics, such as clustering and security, are shown as shaded in this image and are not covered.
In this image, the '+' symbol after the Service, Host, Context
, and Wrapper
instances indicate that there can be one or more of these elements. For instance, a Service
may have a single Engine
, but an Engine
can contain one or more Hosts
. In addition, the whirling circle represents a pool of request processor threads.
In this chapter, we will fly over the architecture of Tomcat from a 10,000-foot perspective taking in the sights as we go.