The distinctions are somewhat blurred.
In a nutshell:
A webserver serves up static HTML files.
An appserver runs an application to build the HTML dynamically.
They're blurred because programs that are traditionally referred to as webservers, like Apache HTTPD, can serve up dynamic content via the common gateway interface (CGI), or with modules like mod_php or mod_perl.
Tomcat, which is an app server, can also function as a standalone webserver.
Not all
servlet engines can do this. Some will only function behind a webserver.
Under certain circumstances, it makes sense to combine Apache HTTPD and Tomcat. Under this configuration, HTTPD serves up the static content, handles all SSL issues, and passes all servlet/JSP requests to tomcat.
Hope this helps.