Java EE containers are the interface between the component and the lower-level functionality provided by the Java EE platform to support that component. The functionality of the container is defined by the Java EE platform, and is different for each component type. Nonetheless, the Java EE server allows the different component types to work together to provide functionality in an enterprise application.
The web container is the interface between web components and the web server. A web component can be a servlet, a JavaServer Faces Facelets page, or a JSP page. The container manages the component's lifecycle, dispatches requests to application components, and provides interfaces to context data, such as information about the current request.
The application client container is the interface between Java EE application clients, which are special Java SE applications that use Java EE server components, and the Java EE server. The application client container runs on the client machine, and is the gateway between the client application and the Java EE server components that the client uses.
The EJB container is the interface between enterprise beans, which provide the business logic in a Java EE application, and the Java EE server. The EJB container runs on the Java EE server and manages the execution of an application's enterprise beans.