I'll have a crack at it. A web-server may have a web-container. The web-container may or may not be built into the web-server. Some web-servers have built in web-containers and some don't. Initially a HTTP request is processed by the web-server. If it doesn't match a file in the web-root, the web-server passes it onto the web-container. The web-container will then try and match it against a servlet/jsp/file in order to generate a response (possibly a dynamically generated response - e.g. servlet/jsp). Web-servers don't know how to produce a dynamic response themselves (they just serve static files). I'm not sure whether a web-container is a servlet-container or whether it contains a servlet-container. I'd guess that servlet-container, servlet-engine and web-container are the same thing but it may be that some servlet-containers have servlet-engines. Maybe you can replace the engine for a container. I didn't think so however. I remember a project where our custom web-server used tomcat as its servlet/jsp engine. I think Tomcat uses Apache when run by itself. Tomcat is the servlet-engine/web-container and Apache is the web-server. Tomcat is a web-container/servlet/jsp engine and can be used by a variety of web-servers. It may be more fine grained than that but that's my understanding.