An application server is a software framework that provides an environment where applications can run, no matter what the applications are or what they do. It is dedicated to the efficient execution of procedures (programs, routines, scripts) for supporting the construction of applications.
The term was originally used when discussing early client–server systems to differentiate servers that run SQL services and middleware servers from file servers.
Later, the term took on the meaning of Web applications, but has since evolved further into more of a comprehensive service layer. An application server acts as a set of components accessible to the software developer through an API defined by the platform itself. For Web applications, these components are usually performed in the same machine where the Web server is running, and their main job is to support the construction of dynamic pages. However, present-day application servers target much more than just Web pages generation, they implement services like clustering, fail-over and load-balancing, so developers can be focused just on implementing the business logic.
Normally the term refers to Java application servers. When this is the case, the application server behaves like an extended virtual machine for the running applications, handling transparently connections to the database at one side, and connections to the Web client at the other.
Other uses of the term may refer to the services that a server makes available or the computer hardware on which the services run
Java application servers
The Web modules include servlets, JavaServer Pages and Enterprise JavaBeans. Business logic resides in Enterprise JavaBeans - a modular server component providing many features, mostly improving application scalability. The Hibernate project offers an EJB-3 container implementation for the JBoss application server. Tomcat from Apache and JOnAS from ObjectWeb exemplify typical containers that can store these modules. The EAServer is from Sybase inc. Sun, now Oracle Glassfish Application server is the most comprehensive Java Enterprise Application Server avalible in both community and licence based versions.
A Java Server Page (JSP) (a servlet from Java — the Java equivalent of a CGI script) executes in a Web container. JSPs provide a way to create HTML pages by embedding references to the server logic within the page. HTML coders and Java programmers can work side by side by referencing each other's code from within their own.
The application servers mentioned above mainly serve Web applications. Some application servers target networks other than web-based ones: Session Initiation Protocol servers, for instance, target telephony networks.
Microsoft positions their middle-tier applications and services infrastructure in the Windows Server operating system and the .NET Framework technologies in the role of an application server.
Mono (not fully .NET compatible), developed by Novell, Inc., licensed under GPL.
Base4 Application Server, an open source project
TNAPS Application Server, freeware application server, developed by TN LLC,
PHP application servers
Are used for running and managing PHP applications.
Zend Server, built by Zend Technologies, provides application server functionality for PHP-based applications
Open-source application servers also come from other vendors. Examples include:
Non-Java offerings have no formal interoperability specifications on par with the Java Specification Request. As a result, interoperability between non-Java products is poor compared to that of Java EE based products. To address these shortcomings, specifications for enterprise application integration and service-oriented architecture were designed[by whom?] to connect the many different products. These specifications include Business Application Programming Interface, Web Services Interoperability, and Java EE Connector Architecture.
Advantages of application servers
Data and code integrity
By centralizing business logic on an individual server or on a small number of server machines, updates and upgrades to the application for all users can be guaranteed. There is no risk of old versions of the application accessing or manipulating data in an older, incompatible manner.
Changes to the application configuration, such as a move of database server, or system settings, can take place centrally.
A central point through which service-providers can manage access to data and portions of the application itself counts as a security benefit, devolving responsibility for authentication away from the potentially insecure client layer without exposing the database layer.
By limiting the network traffic to performance-tier traffic the client–server model improves the performance of large applications in heavy usage environments.
Total Cost of Ownership (TCO)
In combination, the benefits above may result in cost savings to an organization developing enterprise applications. In practice, however, the technical challenges of writing software that conforms to that paradigm, combined with the need for software distribution to distribute client code, somewhat negate these benefits.
A transaction represents a unit of activity in which many updates to resources (on the same or distributed data sources) can be made atomic (as an indivisible unit of work). End-users can benefit from a system-wide standard behaviour, from reduced time to develop, and from reduced costs. As the server does a lot of the tedious code-generation, developers can focus on business logic.