public class

DispatcherServlet

extends FrameworkServlet
java.lang.Object
   ↳ javax.servlet.GenericServlet
     ↳ javax.servlet.http.HttpServlet
       ↳ org.springframework.web.servlet.HttpServletBean
         ↳ org.springframework.web.servlet.FrameworkServlet
           ↳ org.springframework.web.servlet.DispatcherServlet

Class Overview

Central dispatcher for HTTP request handlers/controllers, e.g. for web UI controllers or HTTP-based remote service exporters. Dispatches to registered handlers for processing a web request, providing convenient mapping and exception handling facilities.

This servlet is very flexible: It can be used with just about any workflow, with the installation of the appropriate adapter classes. It offers the following functionality that distinguishes it from other request-driven web MVC frameworks:

  • It is based around a JavaBeans configuration mechanism.
  • It can use any HandlerMapping implementation - pre-built or provided as part of an application - to control the routing of requests to handler objects. Default is BeanNameUrlHandlerMapping and DefaultAnnotationHandlerMapping. HandlerMapping objects can be defined as beans in the servlet's application context, implementing the HandlerMapping interface, overriding the default HandlerMapping if present. HandlerMappings can be given any bean name (they are tested by type).
  • It can use any HandlerAdapter; this allows for using any handler interface. Default adapters are HttpRequestHandlerAdapter, SimpleControllerHandlerAdapter, for Spring's HttpRequestHandler and Controller interfaces, respectively. A default AnnotationMethodHandlerAdapter will be registered as well. HandlerAdapter objects can be added as beans in the application context, overriding the default HandlerAdapters. Like HandlerMappings, HandlerAdapters can be given any bean name (they are tested by type).
  • The dispatcher's exception resolution strategy can be specified via a HandlerExceptionResolver, for example mapping certain exceptions to error pages. Default are AnnotationMethodHandlerExceptionResolver, ResponseStatusExceptionResolver, and DefaultHandlerExceptionResolver. These HandlerExceptionResolvers can be overridden through the application context. HandlerExceptionResolver can be given any bean name (they are tested by type).
  • Its view resolution strategy can be specified via a ViewResolver implementation, resolving symbolic view names into View objects. Default is InternalResourceViewResolver. ViewResolver objects can be added as beans in the application context, overriding the default ViewResolver. ViewResolvers can be given any bean name (they are tested by type).
  • If a View or view name is not supplied by the user, then the configured RequestToViewNameTranslator will translate the current request into a view name. The corresponding bean name is "viewNameTranslator"; the default is DefaultRequestToViewNameTranslator.
  • The dispatcher's strategy for resolving multipart requests is determined by a MultipartResolver implementation. Implementations for Jakarta Commons FileUpload and Jason Hunter's COS are included; the typical choise is CommonsMultipartResolver. The MultipartResolver bean name is "multipartResolver"; default is none.
  • Its locale resolution strategy is determined by a LocaleResolver. Out-of-the-box implementations work via HTTP accept header, cookie, or session. The LocaleResolver bean name is "localeResolver"; default is AcceptHeaderLocaleResolver.
  • Its theme resolution strategy is determined by a ThemeResolver. Implementations for a fixed theme and for cookie and session storage are included. The ThemeResolver bean name is "themeResolver"; default is FixedThemeResolver.

NOTE: The @RequestMapping annotation will only be processed if a corresponding HandlerMapping (for type level annotations) and/or HandlerAdapter (for method level annotations) is present in the dispatcher. This is the case by default. However, if you are defining custom HandlerMappings or HandlerAdapters, then you need to make sure that a corresponding custom DefaultAnnotationHandlerMapping and/or AnnotationMethodHandlerAdapter is defined as well - provided that you intend to use @RequestMapping.

A web application can define any number of DispatcherServlets. Each servlet will operate in its own namespace, loading its own application context with mappings, handlers, etc. Only the root application context as loaded by ContextLoaderListener, if any, will be shared.

Summary

Constants
String HANDLER_ADAPTER_BEAN_NAME Well-known name for the HandlerAdapter object in the bean factory for this namespace.
String HANDLER_EXCEPTION_RESOLVER_BEAN_NAME Well-known name for the HandlerExceptionResolver object in the bean factory for this namespace.
String HANDLER_MAPPING_BEAN_NAME Well-known name for the HandlerMapping object in the bean factory for this namespace.
String LOCALE_RESOLVER_BEAN_NAME Well-known name for the LocaleResolver object in the bean factory for this namespace.
String MULTIPART_RESOLVER_BEAN_NAME Well-known name for the MultipartResolver object in the bean factory for this namespace.
String PAGE_NOT_FOUND_LOG_CATEGORY Log category to use when no mapped handler is found for a request.
String REQUEST_TO_VIEW_NAME_TRANSLATOR_BEAN_NAME Well-known name for the RequestToViewNameTranslator object in the bean factory for this namespace.
String THEME_RESOLVER_BEAN_NAME Well-known name for the ThemeResolver object in the bean factory for this namespace.
String VIEW_RESOLVER_BEAN_NAME Well-known name for the ViewResolver object in the bean factory for this namespace.
[Expand]
Inherited Constants
From class org.springframework.web.servlet.FrameworkServlet
Fields
public static final String LOCALE_RESOLVER_ATTRIBUTE Request attribute to hold the current LocaleResolver, retrievable by views.
public static final String THEME_RESOLVER_ATTRIBUTE Request attribute to hold the current ThemeResolver, retrievable by views.
public static final String THEME_SOURCE_ATTRIBUTE Request attribute to hold the current ThemeSource, retrievable by views.
public static final String WEB_APPLICATION_CONTEXT_ATTRIBUTE Request attribute to hold the current web application context.
protected static final Log pageNotFoundLogger Additional logger to use when no mapped handler is found for a request.
[Expand]
Inherited Fields
From class org.springframework.web.servlet.FrameworkServlet
From class org.springframework.web.servlet.HttpServletBean
Public Constructors
DispatcherServlet()
Public Methods
final MultipartResolver getMultipartResolver()
Obtain this servlet's MultipartResolver, if any.
final ThemeSource getThemeSource()
Return this servlet's ThemeSource, if any; else return null.
void setCleanupAfterInclude(boolean cleanupAfterInclude)
Set whether to perform cleanup of request attributes after an include request, that is, whether to reset the original state of all request attributes after the DispatcherServlet has processed within an include request.
void setDetectAllHandlerAdapters(boolean detectAllHandlerAdapters)
Set whether to detect all HandlerAdapter beans in this servlet's context.
void setDetectAllHandlerExceptionResolvers(boolean detectAllHandlerExceptionResolvers)
Set whether to detect all HandlerExceptionResolver beans in this servlet's context.
void setDetectAllHandlerMappings(boolean detectAllHandlerMappings)
Set whether to detect all HandlerMapping beans in this servlet's context.
void setDetectAllViewResolvers(boolean detectAllViewResolvers)
Set whether to detect all ViewResolver beans in this servlet's context.
Protected Methods
LocaleContext buildLocaleContext(HttpServletRequest request)
Build a LocaleContext for the given request, exposing the request's primary locale as current locale.
HttpServletRequest checkMultipart(HttpServletRequest request)
Convert the request into a multipart request, and make multipart resolver available.
void cleanupMultipart(HttpServletRequest request)
Clean up any resources used by the given multipart request (if any).
Object createDefaultStrategy(ApplicationContext context, Class<?> clazz)
Create a default strategy.
void doDispatch(HttpServletRequest request, HttpServletResponse response)
Process the actual dispatching to the handler.
void doService(HttpServletRequest request, HttpServletResponse response)
Exposes the DispatcherServlet-specific request attributes and delegates to doDispatch(HttpServletRequest, HttpServletResponse) for the actual dispatching.
<T> List<T> getDefaultStrategies(ApplicationContext context, Class<T> strategyInterface)
Create a List of default strategy objects for the given strategy interface.
<T> T getDefaultStrategy(ApplicationContext context, Class<T> strategyInterface)
Return the default strategy object for the given strategy interface.
String getDefaultViewName(HttpServletRequest request)
Translate the supplied request into a default view name.
HandlerExecutionChain getHandler(HttpServletRequest request, boolean cache)
This method is deprecated. as of Spring 3.0.4, in favor of getHandler(javax.servlet.http.HttpServletRequest), with this method's cache attribute now effectively getting ignored
HandlerExecutionChain getHandler(HttpServletRequest request)
Return the HandlerExecutionChain for this request.
HandlerAdapter getHandlerAdapter(Object handler)
Return the HandlerAdapter for this handler object.
void initStrategies(ApplicationContext context)
Initialize the strategy objects that this servlet uses.
void noHandlerFound(HttpServletRequest request, HttpServletResponse response)
No handler found -> set appropriate HTTP response status.
void onRefresh(ApplicationContext context)
This implementation calls initStrategies(ApplicationContext).
ModelAndView processHandlerException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
Determine an error ModelAndView via the registered HandlerExceptionResolvers.
void render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response)
Render the given ModelAndView.
View resolveViewName(String viewName, Map<StringObject> model, Locale locale, HttpServletRequest request)
Resolve the given view name into a View object (to be rendered).
[Expand]
Inherited Methods
From class org.springframework.web.servlet.FrameworkServlet
From class org.springframework.web.servlet.HttpServletBean
From class javax.servlet.http.HttpServlet
From class javax.servlet.GenericServlet
From class java.lang.Object
From interface javax.servlet.Servlet
From interface javax.servlet.ServletConfig
From interface org.springframework.context.EnvironmentAware

Constants

public static final String HANDLER_ADAPTER_BEAN_NAME

Well-known name for the HandlerAdapter object in the bean factory for this namespace. Only used when "detectAllHandlerAdapters" is turned off.

Constant Value: "handlerAdapter"

public static final String HANDLER_EXCEPTION_RESOLVER_BEAN_NAME

Well-known name for the HandlerExceptionResolver object in the bean factory for this namespace. Only used when "detectAllHandlerExceptionResolvers" is turned off.

Constant Value: "handlerExceptionResolver"

public static final String HANDLER_MAPPING_BEAN_NAME

Well-known name for the HandlerMapping object in the bean factory for this namespace. Only used when "detectAllHandlerMappings" is turned off.

Constant Value: "handlerMapping"

public static final String LOCALE_RESOLVER_BEAN_NAME

Well-known name for the LocaleResolver object in the bean factory for this namespace.

Constant Value: "localeResolver"

public static final String MULTIPART_RESOLVER_BEAN_NAME

Well-known name for the MultipartResolver object in the bean factory for this namespace.

Constant Value: "multipartResolver"

public static final String PAGE_NOT_FOUND_LOG_CATEGORY

Log category to use when no mapped handler is found for a request.

Constant Value: "org.springframework.web.servlet.PageNotFound"

public static final String REQUEST_TO_VIEW_NAME_TRANSLATOR_BEAN_NAME

Well-known name for the RequestToViewNameTranslator object in the bean factory for this namespace.

Constant Value: "viewNameTranslator"

public static final String THEME_RESOLVER_BEAN_NAME

Well-known name for the ThemeResolver object in the bean factory for this namespace.

Constant Value: "themeResolver"

public static final String VIEW_RESOLVER_BEAN_NAME

Well-known name for the ViewResolver object in the bean factory for this namespace. Only used when "detectAllViewResolvers" is turned off.

Constant Value: "viewResolver"

Fields

public static final String LOCALE_RESOLVER_ATTRIBUTE

Request attribute to hold the current LocaleResolver, retrievable by views.

public static final String THEME_RESOLVER_ATTRIBUTE

Request attribute to hold the current ThemeResolver, retrievable by views.

public static final String THEME_SOURCE_ATTRIBUTE

Request attribute to hold the current ThemeSource, retrievable by views.

public static final String WEB_APPLICATION_CONTEXT_ATTRIBUTE

Request attribute to hold the current web application context. Otherwise only the global web app context is obtainable by tags etc.

protected static final Log pageNotFoundLogger

Additional logger to use when no mapped handler is found for a request.

Public Constructors

public DispatcherServlet ()

Public Methods

public final MultipartResolver getMultipartResolver ()

Obtain this servlet's MultipartResolver, if any.

Returns
  • the MultipartResolver used by this servlet, or null if none (indicating that no multipart support is available)

public final ThemeSource getThemeSource ()

Return this servlet's ThemeSource, if any; else return null.

Default is to return the WebApplicationContext as ThemeSource, provided that it implements the ThemeSource interface.

Returns
  • the ThemeSource, if any

public void setCleanupAfterInclude (boolean cleanupAfterInclude)

Set whether to perform cleanup of request attributes after an include request, that is, whether to reset the original state of all request attributes after the DispatcherServlet has processed within an include request. Otherwise, just the DispatcherServlet's own request attributes will be reset, but not model attributes for JSPs or special attributes set by views (for example, JSTL's).

Default is "true", which is strongly recommended. Views should not rely on request attributes having been set by (dynamic) includes. This allows JSP views rendered by an included controller to use any model attributes, even with the same names as in the main JSP, without causing side effects. Only turn this off for special needs, for example to deliberately allow main JSPs to access attributes from JSP views rendered by an included controller.

public void setDetectAllHandlerAdapters (boolean detectAllHandlerAdapters)

Set whether to detect all HandlerAdapter beans in this servlet's context. Otherwise, just a single bean with name "handlerAdapter" will be expected.

Default is "true". Turn this off if you want this servlet to use a single HandlerAdapter, despite multiple HandlerAdapter beans being defined in the context.

public void setDetectAllHandlerExceptionResolvers (boolean detectAllHandlerExceptionResolvers)

Set whether to detect all HandlerExceptionResolver beans in this servlet's context. Otherwise, just a single bean with name "handlerExceptionResolver" will be expected.

Default is "true". Turn this off if you want this servlet to use a single HandlerExceptionResolver, despite multiple HandlerExceptionResolver beans being defined in the context.

public void setDetectAllHandlerMappings (boolean detectAllHandlerMappings)

Set whether to detect all HandlerMapping beans in this servlet's context. Otherwise, just a single bean with name "handlerMapping" will be expected.

Default is "true". Turn this off if you want this servlet to use a single HandlerMapping, despite multiple HandlerMapping beans being defined in the context.

public void setDetectAllViewResolvers (boolean detectAllViewResolvers)

Set whether to detect all ViewResolver beans in this servlet's context. Otherwise, just a single bean with name "viewResolver" will be expected.

Default is "true". Turn this off if you want this servlet to use a single ViewResolver, despite multiple ViewResolver beans being defined in the context.

Protected Methods

protected LocaleContext buildLocaleContext (HttpServletRequest request)

Build a LocaleContext for the given request, exposing the request's primary locale as current locale.

The default implementation uses the dispatcher's LocaleResolver to obtain the current locale, which might change during a request.

Parameters
request current HTTP request
Returns
  • the corresponding LocaleContext

protected HttpServletRequest checkMultipart (HttpServletRequest request)

Convert the request into a multipart request, and make multipart resolver available.

If no multipart resolver is set, simply use the existing request.

Parameters
request current HTTP request
Returns
  • the processed request (multipart wrapper if necessary)

protected void cleanupMultipart (HttpServletRequest request)

Clean up any resources used by the given multipart request (if any).

Parameters
request current HTTP request

protected Object createDefaultStrategy (ApplicationContext context, Class<?> clazz)

Create a default strategy.

The default implementation uses createBean(Class, int, boolean).

Parameters
context the current WebApplicationContext
clazz the strategy implementation class to instantiate
Returns
  • the fully configured strategy instance

protected void doDispatch (HttpServletRequest request, HttpServletResponse response)

Process the actual dispatching to the handler.

The handler will be obtained by applying the servlet's HandlerMappings in order. The HandlerAdapter will be obtained by querying the servlet's installed HandlerAdapters to find the first that supports the handler class.

All HTTP methods are handled by this method. It's up to HandlerAdapters or handlers themselves to decide which methods are acceptable.

Parameters
request current HTTP request
response current HTTP response
Throws
Exception in case of any kind of processing failure

protected void doService (HttpServletRequest request, HttpServletResponse response)

Exposes the DispatcherServlet-specific request attributes and delegates to doDispatch(HttpServletRequest, HttpServletResponse) for the actual dispatching.

Parameters
request current HTTP request
response current HTTP response
Throws
Exception

protected List<T> getDefaultStrategies (ApplicationContext context, Class<T> strategyInterface)

Create a List of default strategy objects for the given strategy interface.

The default implementation uses the "DispatcherServlet.properties" file (in the same package as the DispatcherServlet class) to determine the class names. It instantiates the strategy objects through the context's BeanFactory.

Parameters
context the current WebApplicationContext
strategyInterface the strategy interface
Returns
  • the List of corresponding strategy objects

protected T getDefaultStrategy (ApplicationContext context, Class<T> strategyInterface)

Return the default strategy object for the given strategy interface.

The default implementation delegates to getDefaultStrategies(ApplicationContext, Class), expecting a single object in the list.

Parameters
context the current WebApplicationContext
strategyInterface the strategy interface
Returns
  • the corresponding strategy object

protected String getDefaultViewName (HttpServletRequest request)

Translate the supplied request into a default view name.

Parameters
request current HTTP servlet request
Returns
  • the view name (or null if no default found)
Throws
Exception if view name translation failed

protected HandlerExecutionChain getHandler (HttpServletRequest request, boolean cache)

This method is deprecated.
as of Spring 3.0.4, in favor of getHandler(javax.servlet.http.HttpServletRequest), with this method's cache attribute now effectively getting ignored

Return the HandlerExecutionChain for this request. Try all handler mappings in order.

Parameters
request current HTTP request
cache whether to cache the HandlerExecutionChain in a request attribute
Returns
  • the HandlerExecutionChain, or null if no handler could be found
Throws
Exception

protected HandlerExecutionChain getHandler (HttpServletRequest request)

Return the HandlerExecutionChain for this request.

Tries all handler mappings in order.

Parameters
request current HTTP request
Returns
  • the HandlerExecutionChain, or null if no handler could be found
Throws
Exception

protected HandlerAdapter getHandlerAdapter (Object handler)

Return the HandlerAdapter for this handler object.

Parameters
handler the handler object to find an adapter for
Throws
ServletException if no HandlerAdapter can be found for the handler. This is a fatal error.

protected void initStrategies (ApplicationContext context)

Initialize the strategy objects that this servlet uses.

May be overridden in subclasses in order to initialize further strategy objects.

protected void noHandlerFound (HttpServletRequest request, HttpServletResponse response)

No handler found -> set appropriate HTTP response status.

Parameters
request current HTTP request
response current HTTP response
Throws
Exception if preparing the response failed

protected void onRefresh (ApplicationContext context)

This implementation calls initStrategies(ApplicationContext).

Parameters
context the current WebApplicationContext

protected ModelAndView processHandlerException (HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)

Determine an error ModelAndView via the registered HandlerExceptionResolvers.

Parameters
request current HTTP request
response current HTTP response
handler the executed handler, or null if none chosen at the time of the exception (for example, if multipart resolution failed)
ex the exception that got thrown during handler execution
Returns
  • a corresponding ModelAndView to forward to
Throws
Exception if no error ModelAndView found

protected void render (ModelAndView mv, HttpServletRequest request, HttpServletResponse response)

Render the given ModelAndView.

This is the last stage in handling a request. It may involve resolving the view by name.

Parameters
mv the ModelAndView to render
request current HTTP servlet request
response current HTTP servlet response
Throws
ServletException if view is missing or cannot be resolved
Exception if there's a problem rendering the view

protected View resolveViewName (String viewName, Map<StringObject> model, Locale locale, HttpServletRequest request)

Resolve the given view name into a View object (to be rendered).

The default implementations asks all ViewResolvers of this dispatcher. Can be overridden for custom resolution strategies, potentially based on specific model attributes or request parameters.

Parameters
viewName the name of the view to resolve
model the model to be passed to the view
locale the current locale
request current HTTP servlet request
Returns
  • the View object, or null if none found
Throws
Exception if the view cannot be resolved (typically in case of problems creating an actual View object)