Spring MVC
Spring MVC
Spring Web Flow (SWF) aims to be the best solution for the management of web application page
flow.
SWF integrates with existing frameworks like Spring MVC, Struts, and JSF, in both servlet and
portlet environments. If you have a business process (or processes) that would benefit from a
conversational model as opposed to a purely request model, then SWF may be the solution.
SWF allows you to capture logical page flows as self-contained modules that are reusable in
different situations, and as such is ideal for building web application modules that guide the user
through controlled navigations that drive business processes.
For more information about SWF, consult the Spring Web Flow website.
Spring's web module includes many unique web support features:
Clear separation of roles. Each role -- controller, validator, command object, form object, model
object, DispatcherServlet, handler mapping, view resolver, and so on -- can be fulfilled by a
specialized object.
Powerful and straightforward configuration of both framework and application classes as
JavaBeans.
This configuration capability includes easy referencing across contexts, such as from web controllers
to
business objects and validators.
Adaptability, non-intrusiveness, and flexibility. Define any controller method signature you need,
possibly using one of the parameter annotations (such as @RequestParam, @RequestHeader,
@PathVariable, and more) for a given scenario.
Reusable business code, no need for duplication. Use existing business objects as command or form
objects instead of mirroring them to extend a particular framework base class.
Customizable binding and validation. Type mismatches as application-level validation errors that
keep
the offending value, localized date and number binding, and so on instead of String-only form objects
with manual parsing and conversion to business objects.
Customizable handler mapping and view resolution. Handler mapping and view resolution strategies
range from simple URL-based configuration, to sophisticated, purpose-built resolution strategies.
Spring Framework
3.0 Reference Documentation 416
Spring is more flexible than web MVC frameworks that mandate a particular technique.
Flexible model transfer. Model transfer with a name/value Mapsupports easy integration with any
view technology.
Customizable locale and theme resolution, support for JSPs with or without Spring tag library,
support
for JSTL, support for Velocity without the need for extra bridges, and so on.
A simple yet powerful JSP tag library known as the Spring tag library that provides support for
features such as data binding and themes. The custom tags allow for maximum flexibility in terms of
markup code. For information on the tag library descriptor, see the appendix entitled Appendix F,
spring.tld
A JSP form tag library, introduced in Spring 2.0, that makes writing forms in JSP pages much
easier.
For information on the tag library descriptor, see the appendix entitled Appendix G, spring-form.tld
Beans whose lifecycle is scoped to the current HTTP request or HTTP Session. This is not a
specific
feature of Spring MVC itself, but rather of the WebApplicationContextcontainer(s) that
Spring
MVC uses. These bean scopes are described in the section called Request, session, and global
session
scopes
existing investment in skills and tools. A large body of knowledge and experience exist for the Struts
framework. If you can abide Struts' architectural flaws, it can be a viable choice for the web layer; the
same applies to WebWork and other web MVC frameworks.
If you do not want to use Spring's web MVC, but intend to leverage other solutions that Spring offers,
you
can integrate the web MVC framework of your choice with Spring easily. Simply start up a Spring
root
application context through its ContextLoaderListener, and access it through its
ServletContextattribute (or Spring's respective helper method) from within a Struts or
WebWork
action. No "plug-ins" are involved, so no dedicated integration is necessary. From the web layer's
point of
view, you simply use Spring as a library, with the root application context instance as the entry point.
Your registered beans and Spring's services can be at your fingertips even without Spring's Web
MVC.
Spring does not compete with Struts or WebWork in this scenario. It simply addresses the many areas
that
the pure web MVC frameworks do not, from bean configuration to data access and transaction
handling.
So you can enrich your application with a Spring middle tier and/or data access tier, even if you just
want
to use, for example, the transaction abstraction with JDBC or Hibernate.
Spring Framework
3.0 Reference Documentation 418
<servletmapping>
<servletname>example</servletname>
<urlpattern>*.form</urlpattern>
</servletmapping>
</webapp>
In the preceding example, all requests ending with .formwill be handled by the example
DispatcherServlet. This is only the first step in setting up Spring Web MVC. You now need to
configure the various beans used by the Spring Web MVC framework (over and above the
DispatcherServletitself).
As detailed in Section 3.13, Additional Capabilities of the ApplicationContext,
ApplicationContextinstances in Spring can be scoped. In the Web MVC framework, each
DispatcherServlethas its own WebApplicationContext, which inherits all the beans
already
defined in the root WebApplicationContext. These inherited beans can be overridden in the
servlet-specific scope, and you can define new scope-specific beans local to a given servlet instance.