When
the user access the view directly without
going thought any centralized mechanism
each view is required to provide its;
own system services, often resulting
in duplication of code and view navigations
is left to the views, this may result
in commingled view content and view
navigation.
A centralized point of contact for handling
a request may be useful, for example,
to control and log a user's progress
through the site. .
Introducing a controller as the initial
point of contact for handling a request.
The controller manages the handling
of the request, including invoking security
services such as authentication and
authorization, delegating business processing,
managing the choice of an appropriate
view, handling errors, and managing
the selection of content creation strategies.
The controller provides a centralized
entry point that controls and manages
Web request handling. By centralizing
decision points and controls, the controller
also helps reduce the amount of Java
code, called scriptlets, embedded in
the JavaServer Pages (JSP) page.
Centralizing control in the controller
and reducing business logic in the view
promotes code reuse across requests.
It is a preferable approach to the alternative-embedding
code in multiple views-because that
approach may lead to a more error-prone,
reuse-by-copy- and-paste environment.
Typically, a controller coordinates
with a dispatcher component. Dispatchers
are responsible for view management
and navigation. Thus, a dispatcher chooses
the next view for the user and vectors
control to the resource. Dispatchers
may be encapsulated within the controller
directly or can be extracted into a
separate component.
The responsibilities of the components
participating in this patterns are :
Controller
: The controller is the initial
contact point for handling all requests
in the system. The controller may delegate
to a helper to complete authentication
and authorization of a user or to initiate
contact retrieval.
Dispatcher : A dispatcher
is responsible for view management and
navigation, managing the choice of the
next view to present to the user, and
providing the mechanism for vectoring
control to this resource. A dispatcher
can be encapsulated within a controller
or can be a separate component working
in coordination. The dispatcher provides
either a static dispatching to the view
or a more sophisticated dynamic dispatching
mechanism. The dispatcher uses the RequestDispatcher
object (supported in the servlet specification)
and encapsulates some additional processing.
Helper : A helper is responsible
for helping a view or controller complete
its processing. Thus, helpers have numerous
responsibilities, including gathering
data required by the view and storing
this intermediate model, in which case
the helper is sometimes referred to
as a value bean. Additionally, helpers
may adapt this data model for use by
the view. Helpers can service requests
for data from the view by simply providing
access to the raw data or by formatting
the data as Web content. A view may
work with any number of helpers, which
are typically implemented as JavaBeans
components (JSP 1.0+) and custom tags
(JSP 1.1+). Additionally, a helper may
represent a Command object, a delegate,
or an XSL Transformer, which is used
in combination with a stylesheet to
adapt and convert the model into the
appropriate form.
View
A view represents and displays
information to the client. The view
retrieves information from a model.
Helpers support views by encapsulating
and adapting the underlying data model
for use in the display.
Front Controller centralizes
control. A controller provides a central
place to handle system services and
business logic across multiple requests.
A controller manages business logic
processing and request handling. Centralized
access to an application means that
requests are easily tracked and logged.
Keep in mind, though, that as control
centralizes, it is possible to introduce
a single point of failure. In practice,
this rarely is a problem, though, since
multiple controllers typically exist,
either within a single server or in
a cluster.
Front Controller improves manageability
of security. A controller centralizes
control, providing a choke point for
illicit access attempts into the Web
application. In addition, auditing a
single entrance into the application
requires fewer resources than distributing
security checks across all pages.
Front Controller improves reusability.
A controller promotes cleaner application
partitioning and encourages reuse, as
code that is common among components
moves into a controller or is managed
by a controller. |