Hi David !
From the definition above, it seems a web server runs Servlet
So what is your understanding of an application server and a web server? Vicious one, but I agree with Sun's definition.
You already know the 3 relevant actors which interest us are Web container (pure HTML, typically Apache), JSP/Servlet container (HTML+JSP/Servlet, typically Tomcat), and application servers (HTML+JSP/Servlet+EJB, typically
JBoss, Weblogic, Websphere, ...).
But historically, Web servers could deliver only static HTML (Web container step above, no issue). Then they were enhanced with CGI programming features allowing dynamic content delivery (dynamic HTML, no longer static only HTML). These CGI programms could be anything able to read system environment variables (Shell, C, PERL,
Java, ...). But great issue was that a full new program had to be launched (creation, processing, destruction) for each call, which was extremely costly about resource consumption. This is where Servlets helped by pre-building programs and storing some of their instances in a pool, ready to be delivered on demand (so processing cycle only). This made much relief for resource consumption. Of course this is JSP/Servlet container step for us, BUT seen from client side it remains an ordinary Web call for it delivers HTML in response to request, totally similar to a Web container. For client makes a HTTP request, server intercepts it, lauches program (CGI, Servlets, whatever...) to build HTML page in return, so this function is typical of Web server.
This is why in litterature while on java side we have distinctly our 3 different actors (Web container, JSP/Servlet container, and application server), on Web architecture side we simply have 2 actors : Web server (delivers HTML only, static or dynamic), and application server (delivers HTML and many services).
So consider JSP/Servlet container as enhanced Web server, and
you should feel confortable with Sun's definition.
Best regards.