public abstract class

AbstractUrlHandlerMapping

extends AbstractHandlerMapping
java.lang.Object
   ↳ org.springframework.context.support.ApplicationObjectSupport
     ↳ org.springframework.web.context.support.WebApplicationObjectSupport
       ↳ org.springframework.web.servlet.handler.AbstractHandlerMapping
         ↳ org.springframework.web.servlet.handler.AbstractUrlHandlerMapping
Known Direct Subclasses
Known Indirect Subclasses

Class Overview

Abstract base class for URL-mapped HandlerMapping implementations. Provides infrastructure for mapping handlers to URLs and configurable URL lookup. For information on the latter, see "alwaysUseFullPath" property.

Supports direct matches, e.g. a registered "/test" matches "/test", and various Ant-style pattern matches, e.g. a registered "/t*" pattern matches both "/test" and "/team", "/test/*" matches all paths in the "/test" directory, "/test/**" matches all paths below "/test". For details, see the AntPathMatcher javadoc.

Will search all path patterns to find the most exact match for the current request path. The most exact match is defined as the longest path pattern that matches the current request path.

Summary

[Expand]
Inherited Constants
From interface org.springframework.core.Ordered
[Expand]
Inherited Fields
From class org.springframework.context.support.ApplicationObjectSupport
From interface org.springframework.web.servlet.HandlerMapping
Public Constructors
AbstractUrlHandlerMapping()
Public Methods
final Map<StringObject> getHandlerMap()
Return the registered handlers as an unmodifiable Map, with the registered path as key and the handler object (or handler bean name in case of a lazy-init handler) as value.
PathMatcher getPathMatcher()
Return the PathMatcher implementation to use for matching URL paths against registered URL patterns.
Object getRootHandler()
Return the root handler for this handler mapping (registered for "/"), or null if none.
void setAlwaysUseFullPath(boolean alwaysUseFullPath)
Set if URL lookup should always use the full path within the current servlet context.
void setLazyInitHandlers(boolean lazyInitHandlers)
Set whether to lazily initialize handlers.
void setMappedInterceptors(MappedInterceptor[] mappedInterceptors)
void setPathMatcher(PathMatcher pathMatcher)
Set the PathMatcher implementation to use for matching URL paths against registered URL patterns.
void setRootHandler(Object rootHandler)
Set the root handler for this handler mapping, that is, the handler to be registered for the root path ("/").
void setUrlDecode(boolean urlDecode)
Set if context path and request URI should be URL-decoded.
void setUrlPathHelper(UrlPathHelper urlPathHelper)
Set the UrlPathHelper to use for resolution of lookup paths.
Protected Methods
Object buildPathExposingHandler(Object rawHandler, String bestMatchingPattern, String pathWithinMapping, Map<StringString> uriTemplateVariables)
Build a handler object for the given raw handler, exposing the actual handler, the PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, as well as the URI_TEMPLATE_VARIABLES_ATTRIBUTE before executing the handler.
void exposePathWithinMapping(String bestMatchingPattern, String pathWithinMapping, HttpServletRequest request)
Expose the path within the current mapping as request attribute.
void exposeUriTemplateVariables(Map<StringString> uriTemplateVariables, HttpServletRequest request)
Expose the URI templates variables as request attribute.
Object getHandlerInternal(HttpServletRequest request)
Look up a handler for the URL path of the given request.
void initInterceptors()
Initialize the specified interceptors, adapting them where necessary.
Object lookupHandler(String urlPath, HttpServletRequest request)
Look up a handler instance for the given URL path.
void registerHandler(String[] urlPaths, String beanName)
Register the specified handler for the given URL paths.
void registerHandler(String urlPath, Object handler)
Register the specified handler for the given URL path.
boolean supportsTypeLevelMappings()
Indicates whether this handler mapping support type-level mappings.
void validateHandler(Object handler, HttpServletRequest request)
Validate the given handler against the current request.
[Expand]
Inherited Methods
From class org.springframework.web.servlet.handler.AbstractHandlerMapping
From class org.springframework.web.context.support.WebApplicationObjectSupport
From class org.springframework.context.support.ApplicationObjectSupport
From class java.lang.Object
From interface org.springframework.context.ApplicationContextAware
From interface org.springframework.core.Ordered
From interface org.springframework.web.context.ServletContextAware
From interface org.springframework.web.servlet.HandlerMapping

Public Constructors

public AbstractUrlHandlerMapping ()

Public Methods

public final Map<StringObject> getHandlerMap ()

Return the registered handlers as an unmodifiable Map, with the registered path as key and the handler object (or handler bean name in case of a lazy-init handler) as value.

public PathMatcher getPathMatcher ()

Return the PathMatcher implementation to use for matching URL paths against registered URL patterns.

public Object getRootHandler ()

Return the root handler for this handler mapping (registered for "/"), or null if none.

public void setAlwaysUseFullPath (boolean alwaysUseFullPath)

Set if URL lookup should always use the full path within the current servlet context. Else, the path within the current servlet mapping is used if applicable (that is, in the case of a ".../*" servlet mapping in web.xml).

Default is "false".

public void setLazyInitHandlers (boolean lazyInitHandlers)

Set whether to lazily initialize handlers. Only applicable to singleton handlers, as prototypes are always lazily initialized. Default is "false", as eager initialization allows for more efficiency through referencing the controller objects directly.

If you want to allow your controllers to be lazily initialized, make them "lazy-init" and set this flag to true. Just making them "lazy-init" will not work, as they are initialized through the references from the handler mapping in this case.

public void setMappedInterceptors (MappedInterceptor[] mappedInterceptors)

public void setPathMatcher (PathMatcher pathMatcher)

Set the PathMatcher implementation to use for matching URL paths against registered URL patterns. Default is AntPathMatcher.

See Also

public void setRootHandler (Object rootHandler)

Set the root handler for this handler mapping, that is, the handler to be registered for the root path ("/").

Default is null, indicating no root handler.

public void setUrlDecode (boolean urlDecode)

Set if context path and request URI should be URL-decoded. Both are returned undecoded by the Servlet API, in contrast to the servlet path.

Uses either the request encoding or the default encoding according to the Servlet spec (ISO-8859-1).

public void setUrlPathHelper (UrlPathHelper urlPathHelper)

Set the UrlPathHelper to use for resolution of lookup paths.

Use this to override the default UrlPathHelper with a custom subclass, or to share common UrlPathHelper settings across multiple HandlerMappings and MethodNameResolvers.

Protected Methods

protected Object buildPathExposingHandler (Object rawHandler, String bestMatchingPattern, String pathWithinMapping, Map<StringString> uriTemplateVariables)

Build a handler object for the given raw handler, exposing the actual handler, the PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE, as well as the URI_TEMPLATE_VARIABLES_ATTRIBUTE before executing the handler.

The default implementation builds a HandlerExecutionChain with a special interceptor that exposes the path attribute and uri template variables

Parameters
rawHandler the raw handler to expose
pathWithinMapping the path to expose before executing the handler
uriTemplateVariables the URI template variables, can be null if no variables found
Returns
  • the final handler object

protected void exposePathWithinMapping (String bestMatchingPattern, String pathWithinMapping, HttpServletRequest request)

Expose the path within the current mapping as request attribute.

Parameters
pathWithinMapping the path within the current mapping
request the request to expose the path to

protected void exposeUriTemplateVariables (Map<StringString> uriTemplateVariables, HttpServletRequest request)

Expose the URI templates variables as request attribute.

Parameters
uriTemplateVariables the URI template variables
request the request to expose the path to

protected Object getHandlerInternal (HttpServletRequest request)

Look up a handler for the URL path of the given request.

Parameters
request current HTTP request
Returns
  • the handler instance, or null if none found
Throws
Exception

protected void initInterceptors ()

Initialize the specified interceptors, adapting them where necessary.

protected Object lookupHandler (String urlPath, HttpServletRequest request)

Look up a handler instance for the given URL path.

Supports direct matches, e.g. a registered "/test" matches "/test", and various Ant-style pattern matches, e.g. a registered "/t*" matches both "/test" and "/team". For details, see the AntPathMatcher class.

Looks for the most exact pattern, where most exact is defined as the longest path pattern.

Parameters
urlPath URL the bean is mapped to
request current HTTP request (to expose the path within the mapping to)
Returns
  • the associated handler instance, or null if not found
Throws
Exception

protected void registerHandler (String[] urlPaths, String beanName)

Register the specified handler for the given URL paths.

Parameters
urlPaths the URLs that the bean should be mapped to
beanName the name of the handler bean
Throws
BeansException if the handler couldn't be registered
IllegalStateException if there is a conflicting handler registered

protected void registerHandler (String urlPath, Object handler)

Register the specified handler for the given URL path.

Parameters
urlPath the URL the bean should be mapped to
handler the handler instance or handler bean name String (a bean name will automatically be resolved into the corresponding handler bean)
Throws
BeansException if the handler couldn't be registered
IllegalStateException if there is a conflicting handler registered

protected boolean supportsTypeLevelMappings ()

Indicates whether this handler mapping support type-level mappings. Default to false.

protected void validateHandler (Object handler, HttpServletRequest request)

Validate the given handler against the current request.

The default implementation is empty. Can be overridden in subclasses, for example to enforce specific preconditions expressed in URL mappings.

Parameters
handler the handler object to validate
request current HTTP request
Throws
Exception if validation failed