1) "Web server" vs "Servlet container"
I believe the most common classification is that a web server is an implementation of HTTP compliant server, usually serving static content such as HTML files or GIF/JPEG/PNG images or PDF files. "Web server" is often associated with Apache, not anything related to
Java Servlets or the
J2EE specification.
A "servlet container" almost always refers to a J2EE-compliant server supporting the Java Servlet specification (and often
JSP). I said "almost" because I remember seeing a product, which implements a servlet container for C++ code (with an API similar to javax.servlet.*)...
2) "App server" vs "Web server"
An application server is generally a J2EE application server, hosting applications - business logic. There are application servers for other technology platforms as well but the J2EE application server is by far the most common concept. A web server, as I already mentioned, is a "dumb" server with no business logic.