A web application framework is a software framework that is designed to support the
development of dynamic websites, web applications, web services and web resources.
The framework aims to alleviate the overhead associated with common activities performed
in web development.
For example, many frameworks provide libraries for database access, templating frameworks
and session management, and they often promote code reuse.
For a comparison of concrete web application frameworks, see Comparison of web application
frameworks.
History As the design of the World Wide Web was not
inherently dynamic, early hypertext consisted of hand-coded HTML that was published on web
servers.
Any modifications to published pages needed to be performed by the pages' author.
To provide a dynamic web page that reflected user inputs, the Common Gateway Interface
standard was introduced for interfacing external applications with web servers.
CGI could adversely affect server load, though, since each request had to start a separate
process.
Programmers wanted tighter integration with the web server to enable high-traffic web
applications.
The Apache HTTP Server, for example, supports modules that can extend the web server with
arbitrary code executions or forward specific requests to a web server that can handle dynamic
content.
Some web servers were specifically designed to handle dynamic content by executing code
written in some languages, such as Java.
Around the same time, full integrated server/language development environments first emerged, such
as WebBase and new languages specifically for use in the web started to emerge, such
as ColdFusion, PHP and Active Server Pages.
While the vast majority of languages available to programmers to use in creating dynamic
web pages have libraries to help with common tasks, web applications often require specific
libraries that are useful in web applications, such as creating HTML.
Eventually, mature, "full stack" frameworks appeared, that often gathered multiple libraries
useful for web development into a single cohesive software stack for web developers to use.
Examples of this include ASP.NET, JavaEE, WebObjects, web2py, OpenACS, Catalyst, Mojolicious,
Ruby on Rails, Grails, Django, Zend Framework, Yii, CakePHP and Symfony.
Types of framework architectures Most web application frameworks are based
on the model–view–controller pattern.
Model–view–controller
Many frameworks follow the MVC architectural pattern to separate the data model with business
rules from the user interface.
This is generally considered a good practice as it modularizes code, promotes code reuse,
and allows multiple interfaces to be applied.
In web applications, this permits different views to be presented, such as web pages for
humans, and web service interfaces for remote applications.
Push-based vs. pull-based Most MVC frameworks follow a push-based architecture
also called "action-based".
These frameworks use actions that do the required processing, and then "push" the data to the
view layer to render the results.
Struts, Django, Ruby on Rails, Symfony, Yii, Spring MVC, Stripes, Play, CodeIgniter and
Struts2 are good examples of this architecture.
An alternative to this is pull-based architecture, sometimes also called "component-based".
These frameworks start with the view layer, which can then "pull" results from multiple
controllers as needed.
In this architecture, multiple controllers can be involved with a single view.
Lift, Tapestry, JBoss Seam, JavaServer Faces,Micro, and Wicket are examples of pull-based architectures.
Three-tier organization In three-tier organization, applications are
structured around three physical tiers: client, application, and database.
The database is normally an RDBMS.
The application contains the business logic, running on a server and communicates with
the client using HTTP.
The client, on web applications is a web browser that runs HTML generated by the application
layer.
The term should not be confused with MVC, where, unlike in three-tier architecture,
it is considered a good practice to keep business logic away from the controller, the "middle
layer".
Framework applications Frameworks are built to support the construction
of internet applications based on a single programming language, ranging in focus from
general purpose tools such as Zend Framework and Ruby on Rails, which augment the capabilities
of a specific language, to native-language programmable packages built around a specific
user application, such as Content Management systems, some mobile development tools and
some portal tools.
General-purpose website frameworks For example, Zend Framework.
Discussion forums, wikis and weblogs For example, WikiBase/WikiWikiWeb.
Organizational portals For example, JBoss Portal or eXo Platform.
Content management systems
In web application frameworks, content management is the way of organizing, categorizing, and
structuring the information resources like text, images, documents, audio and video files
so that they can be stored, published, and edited with ease and flexibility.
A content management system is used to collect, manage, and publish content, storing it either
as components or whole documents, while maintaining dynamic links between components.
Some projects that have historically been termed content management systems have begun
to take on the roles of higher-layer web application frameworks.
For instance, Drupal's structure provides a minimal core whose function is extended
through modules that provide functions generally associated with web application frameworks.
The Solodev and Joomla platforms provide a set of APIs to build web and command-line
applications.
However, it is debatable whether "management of content" is the primary value of such systems,
especially when some, like SilverStripe, provide an object-oriented MVC framework.
Add-on modules now enable these systems to function as full-fledged applications beyond
the scope of content management.
They may provide functional APIs, functional frameworks, coding standards, and many of
the functions traditionally associated with Web application frameworks.
Features Web template system
Caching
Web caching is the caching of web documents in order to reduce bandwidth usage, server
load, and perceived "lag".
A web cache stores copies of documents passing through it; subsequent requests may be satisfied
from the cache if certain conditions are met.
Some application frameworks provide mechanisms for caching documents and bypassing various
stages of the page's preparation, such as database access or template interpretation.
Security
Some web application frameworks come with authentication and authorization frameworks,
that enable the web server to identify the users of the application, and restrict access
to functions based on some defined criteria.
Drupal is one example that provides role-based access to pages, and provides a web-based
interface for creating users and assigning them roles.
Database access, mapping and configuration Many web application frameworks create a unified
API to a database backend, enabling web applications to work with a variety of databases with no
code changes, and allowing programmers to work with higher-level concepts.
For higher performance, database connections should be pooled as e.g. AOLserver does.
Additionally, some object-oriented frameworks contain mapping tools to provide object-relational
mapping, which maps objects to tuples.
Some frameworks minimize web application configuration through the use of introspection and/or following
well-known conventions.
For example, many Java frameworks use Hibernate as a persistence layer, which can generate
a database schema at runtime capable of persisting the necessary information.
This allows the application designer to design business objects without needing to explicitly
define a database schema.
Frameworks such as Ruby on Rails can also work in reverse, that is, define properties
of model objects at runtime based on a database schema.
Other features web application frameworks may provide include transactional support
and database migration tools.
Scaffolding
URL mapping A framework's URL mapping facility is the
mechanism by which the framework interprets URLs.
Some frameworks, such as Drupal and Django, match the provided URL against pre-determined
patterns using regular expressions, while some others use URL rewriting to translate
the provided URL into one that the underlying engine will recognize.
Another technique is that of graph traversal such as used by Zope, where a URL is decomposed
in steps that traverse an object graph.
A URL mapping system that uses pattern matching or URL rewriting allows more "friendly URLs"
to be used, increasing the simplicity of the site and allowing for better indexing by search
engines.
For example, a URL that ends with "/page.cgi?cat=science&topic=physics" could be changed to simply "science/physics".
This makes the URL easier for people to read and hand write, and provides search engines
with better information about the structural layout of the site.
A graph traversal approach also tends to result in the creation of friendly URLs.
A shorter URL such as "science" tends to exist by default as that is simply a shorter form
of the longer traversal to "science/physics".
Ajax
Ajax, shorthand for "Asynchronous JavaScript and XML", is a web development technique for
creating web applications.
The intent is to make web pages feel more responsive by exchanging small amounts of
data with the server behind the scenes, so that the entire web page does not have to
be reloaded each time the user requests a change.
This is intended to increase a web page's interactivity, speed, and usability.
Due to the complexity of Ajax programming in JavaScript, there are numerous Ajax frameworks
that exclusively deal with Ajax support.
Some Ajax frameworks are even embedded as a part of larger frameworks.
For example, the jQuery JavaScript library is included in Ruby on Rails.
With the increased interest in developing "Web 2.0" rich media applications, the complexity
of programming directly in Ajax and JavaScript has become so apparent that compiler technology
has stepped in, to allow developers to code in high-level languages such as Java, Python
and Ruby.
The first of these compilers was Morfik followed by Google Web Toolkit, with ports to Python
and Ruby in the form of Pyjamas and RubyJS following some time after.
These compilers and their associated widget set libraries make the development of rich
media Ajax applications much more akin to that of developing desktop applications.
Web services
Some frameworks provide tools for creating and providing web services.
These utilities may offer similar tools as the rest of the web application.
Web resources
A number of newer Web 2.0 RESTful frameworks are now providing resource-oriented architecture
infrastructure for building collections of resources in a sort of Semantic Web ontology,
based on concepts from Resource Description Framework.
See also Comparison of web application frameworks
Rich Internet application List of rich Internet application frameworks
List of web service frameworks Comparison of application servers
Application framework Application security
Convention over configuration Don't repeat yourself
Solution stack Multiple phone web-based application framework
References