The front controller
software design pattern
In software engineering, a software design pattern or design pattern is a general, reusable solution to a commonly occurring problem in many contexts in software design. A design pattern is not a rigid structure to be transplanted directly into s ...
is listed in several pattern catalogs and is related to the design of web applications. It is "a
controller that handles all requests for a
website
A website (also written as a web site) is any web page whose content is identified by a common domain name and is published on at least one web server. Websites are typically dedicated to a particular topic or purpose, such as news, educatio ...
,"
which is a useful structure for web application developers to achieve flexibility and reuse without code redundancy.
Instruction

Front controllers are often used in
web application
A web application (or web app) is application software that is created with web technologies and runs via a web browser. Web applications emerged during the late 1990s and allowed for the server to dynamically build a response to the request, ...
s to implement workflows. While not strictly required, it is much easier to control navigation across a set of related pages (for instance, multiple pages used in an online purchase) from a front controller than it is to assign individual pages responsibility for navigation.
The front controller may be implemented as a
Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
object, or as a script in a
scripting language
In computing, a script is a relatively short and simple set of instructions that typically automation, automate an otherwise manual process. The act of writing a script is called scripting. A scripting language or script language is a programming ...
such as
PHP,
Raku,
Python or
Ruby
Ruby is a pinkish-red-to-blood-red-colored gemstone, a variety of the mineral corundum ( aluminium oxide). Ruby is one of the most popular traditional jewelry gems and is very durable. Other varieties of gem-quality corundum are called sapph ...
that is called for every request of a web
session. This script would handle all tasks that are common to the application or the framework, such as session handling,
caching and input filtering. Based on the specific request, it would then instantiate further objects and call methods to handle the required tasks.
The alternative to a front controller is the usage of page controllers mapped to each site page or path. Although this may cause each individual controller to contain duplicate code, the page-controller approach delivers a high degree of specialization.
Examples
Several web-tier application frameworks implement the front controller pattern:
*
Apache Struts
*
ASP.NET MVC
*
Cairngorm framework in
Adobe Flex
Apache Flex, formerly Adobe Flex, is a software development kit (SDK) for the development and deployment of cross-platform rich web applications based on the Adobe Flash platform. Initially developed by Macromedia and then acquired by Adobe Syste ...
* Cro or Bailador frameworks in
Raku
*
Drupal
Drupal () is a free and open-source web content management system (CMS) written in PHP and distributed under the GNU General Public License. Drupal provides an open-source back-end framework for at least 14% of the top 10,000 websites worldwide ...
*
MVC frameworks written in
PHP, such as
Yii,
CakePHP
CakePHP is an open-source web framework. It follows the model–view–controller (MVC) approach and is written in PHP, modeled after the concepts of Ruby on Rails, and distributed under the MIT License.
CakePHP uses well-known software engin ...
,
Laravel
Laravel is a open-source software, free and open-source PHP-based web framework for building web applications. It was created by Taylor Otwell and intended for the development of web applications following the model–view–controller (MVC) ar ...
,
Symfony,
CodeIgniter and
Laminas
*
Spring Framework
*
Yesod, written in
Haskell
Haskell () is a general-purpose, statically typed, purely functional programming language with type inference and lazy evaluation. Designed for teaching, research, and industrial applications, Haskell pioneered several programming language ...
Implementation
Front controllers may divided into three components:
#
XML
Extensible Markup Language (XML) is a markup language and file format for storing, transmitting, and reconstructing data. It defines a set of rules for encoding electronic document, documents in a format that is both human-readable and Machine-r ...
mapping: files that map requests to the class that will handle the request processing.
# Request processor: used for request processing and modifying or retrieving the appropriate model.
# Flow manager: determines what will be shown on the next page.
Participants and responsibilities
Java implementation example
The front controller implemented in Java code:
private void doProcess(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
...
try {
getRequestProcessor().processRequest(request);
getScreenFlowManager().forwardToNextScreen(request, response);
} catch (Throwable ex) {
String className = ex.getClass().getName();
nextScreen = getScreenFlowManager().getExceptionScreen(ex);
// Put the exception in the request
request.setAttribute("javax.servlet.jsp.jspException", ex);
if (nextScreen null) {
// Send to general error screen
ex.printStackTrace();
throw new ServletException("MainServlet: unknown exception: " +
className);
}
}
Benefits and liabilities
There are three primary benefits associated with the front controller pattern.
* Centralized control. The front controller handles all the requests to the
web application
A web application (or web app) is application software that is created with web technologies and runs via a web browser. Web applications emerged during the late 1990s and allowed for the server to dynamically build a response to the request, ...
. This implementation of centralized control that avoids using multiple controllers is desirable for enforcing application-wide policies such as user tracking and security.
* Thread safety. A new command object arises when receiving a new request, and the command objects are not meant to be thread-safe. Thus, it will be safe in the command classes. Though safety is not guaranteed when threading issues are gathered, code that interacts with commands is still thread-safe.
* Configurability. As only one front controller is employed in a web application, the application configuration may be greatly simplified. Because the handler shares the responsibility of dispatching, new commands may be added without changes needed to the code.
The front controller pattern may incur performance issues because the single controller is performing a great deal of work, and handlers may introduce bottlenecks if they involve database or document queries. The front controller approach is also more complex than that of page controllers.
Relationship with MVC
# In order to improve system reliability and maintainability, duplicate code should be avoided and centralized when it involves common logic used throughout the system.
# The data for the application is best handled in a single location, obviating the need for duplicate data-retrieval code.
# Different roles in the
model–view–controller
Model–view–controller (MVC) is a software architectural pattern commonly used for developing user interfaces that divides the related program logic into three interconnected elements. These elements are:
* the model, the internal representat ...
(MVC) pattern should be separated to increase testability, which is also true for the controller part in the MVC pattern.
Comparison
The page-controller pattern is an alternative to the front controller approach in the MVC model.
{, class="wikitable"
!
!Page Controller
!Front Controller
, -
, Base class
, A base class is needed and will grow simultaneously with the development of the application.
, The centralization of requests is easier to modify than is a base class.
, -
, Security
, Low security because various objects react differently without consistency.
, High, because the controller is implemented in a coordinated fashion.
, -
, Logical Page
, Single object on each logical page.
, Only one controller handles all requests.
, -
, Complexity
, Low
, High
See also
*
Software design pattern
In software engineering, a software design pattern or design pattern is a general, reusable solution to a commonly occurring problem in many contexts in software design. A design pattern is not a rigid structure to be transplanted directly into s ...
*
Mediator pattern
In software engineering, the mediator pattern defines an object that Encapsulation (computer programming), encapsulates how a set of objects interact. This pattern is considered to be a behavioral pattern due to the way it can alter the program's ...
(note: the front controller pattern is a specialized kind of mediator pattern)
References
Notes
*
*
External links
Bear Bibeault's Front Man™ a lightweight Java implementation.
{{Design Patterns patterns
Architectural pattern (computer science)
Software design patterns