Taking a big step back, a Web server serves pages for viewing in a Web browser, while an application server provides methods
that client applications can call. A little more precisely, you can say that:
A Web server exclusively handles HTTP requests, whereas an application server serves business logic to application programs
through any number of protocols.
Let's examine each in more detail.
The Web server
A
Web server handles the HTTP protocol. When the Web server receives an
HTTP request, it responds with an HTTP response, such as sending back
an HTML page. To process a request, a Web server may respond with a
static HTML page or image, send a redirect, or delegate the dynamic
response generation to some other program such as CGI scripts, JSPs
(JavaServer Pages), servlets, ASPs (Active Server Pages), server-side
JavaScripts, or some other server-side technology. Whatever their
purpose, such server-side programs generate a response, most often in
HTML, for viewing in a Web browser.
Understand that a
Web server's delegation model is fairly simple. When a request comes
into the Web server, the Web server simply passes the request to the
program best able to handle it. The Web server doesn't provide any
functionality beyond simply providing an environment in which the
server-side program can execute and pass back the generated responses.
The server-side program usually provides for itself such functions as
transaction processing, database connectivity, and messaging.
While a Web server
may not itself support transactions or database connection pooling, it
may employ various strategies for fault tolerance and scalability such
as load balancing, caching, and clustering—features oftentimes
erroneously assigned as features reserved only for application servers.
The application server
As
for the application server, according to our definition, an application
server exposes business logic to client applications through various
protocols, possibly including HTTP. While a Web server mainly deals
with sending HTML for display in a Web browser, an application server
provides access to business logic for use by client application
programs. The application program can use this logic just as it would
call a method on an object (or a function in the procedural world).
Such application
server clients can include GUIs (graphical user interface) running on a
PC, a Web server, or even other application servers. The information
traveling back and forth between an application server and its client
is not restricted to simple display markup. Instead, the information is
program logic. Since the logic takes the form of data and method calls
and not static HTML, the client can employ the exposed business logic
however it wants.
In most cases, the
server exposes this business logic through a component API, such as the
EJB (Enterprise JavaBean) component model found on J2EE (Java 2
Platform, Enterprise Edition) application servers. Moreover, the
application server manages its own resources. Such gate-keeping duties
include security, transaction processing, resource pooling, and
messaging. Like a Web server, an application server may also employ
various scalability and fault-tolerance techniques.