Top Description Fields Constructors Methods
org.springframework.web.servlet.view

public Class UrlBasedViewResolver

extends AbstractCachingViewResolver
implements Ordered
Class Inheritance
All Implemented Interfaces
org.springframework.core.Ordered
Known Direct Subclasses
org.springframework.web.servlet.view.script.ScriptTemplateViewResolver, org.springframework.web.servlet.view.xslt.XsltViewResolver, org.springframework.web.servlet.view.AbstractTemplateViewResolver, org.springframework.web.servlet.view.InternalResourceViewResolver
Imports
java.util.HashMap, .Locale, .Map, .Properties, jakarta.servlet.http.HttpServletResponse, org.springframework.beans.BeanUtils, org.springframework.context.ApplicationContext, org.springframework.core.Ordered, org.springframework.lang.Nullable, org.springframework.util.Assert, .CollectionUtils, .PatternMatchUtils, org.springframework.web.servlet.View

Simple implementation of the org.springframework.web.servlet.ViewResolver interface, allowing for direct resolution of symbolic view names to URLs, without explicit mapping definitions. This is useful if your symbolic names match the names of your view resources in a straightforward manner (i.e. the symbolic name is the unique part of the resource's filename), without the need for a dedicated mapping to be defined for each view.

Supports AbstractUrlBasedView subclasses like InternalResourceView and org.springframework.web.servlet.view.freemarker.FreeMarkerView. The view class for all views generated by this resolver can be specified via the "viewClass" property.

View names can either be resource URLs themselves, or get augmented by a specified prefix and/or suffix. Exporting an attribute that holds the RequestContext to all views is explicitly supported.

Example: prefix="/WEB-INF/jsp/", suffix=".jsp", viewname="test" → "/WEB-INF/jsp/test.jsp"

As a special feature, redirect URLs can be specified via the "redirect:" prefix. E.g.: "redirect:myAction" will trigger a redirect to the given URL, rather than resolution as standard view name. This is typically used for redirecting to a controller URL after finishing a form workflow.

Furthermore, forward URLs can be specified via the "forward:" prefix. E.g.: "forward:myAction" will trigger a forward to the given URL, rather than resolution as standard view name. This is typically used for controller URLs; it is not supposed to be used for JSP URLs - use logical view names there.

Note

This class does not support localized resolution, i.e. resolving a symbolic view name to different resources depending on the current locale.

Note

When chaining ViewResolvers, a UrlBasedViewResolver will check whether the specified resource actually exists. However, with InternalResourceView, it is not generally possible to determine the existence of the target resource upfront. In such a scenario, a UrlBasedViewResolver will always return a View for any given view name; as a consequence, it should be configured as the last ViewResolver in the chain.

Authors
Juergen Hoeller, Rob Harrop, Sam Brannen
Since
13.12.2003
See Also
setViewClass, setPrefix, setSuffix, setRequestContextAttribute, REDIRECT_URL_PREFIX, AbstractUrlBasedView, InternalResourceView, org.springframework.web.servlet.view.freemarker.FreeMarkerView

Field Summary

Modifier and TypeField and Description
private String
private Boolean
private String[]
private Boolean
public static final String
FORWARD_URL_PREFIX

Prefix for special view names that specify a forward URL (usually to a controller after a form has been submitted and processed).

private int
private String
public static final String
REDIRECT_URL_PREFIX

Prefix for special view names that specify a redirect URL (usually to a controller after a form has been submitted and processed).

private boolean
private String[]
private boolean
private String
private final Map<String, Object>
staticAttributes

Map of static attributes, keyed by attribute name (String).

private String
private Class<?>
private String[]
Inherited from org.springframework.web.servlet.view.AbstractCachingViewResolver:
DEFAULT_CACHE_LIMIT

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
protected View

Returns:

the View instance to use (either the original one or a decorated variant)
applyLifecycleMethods
(String
the name of the view
viewName
,
AbstractUrlBasedView
the freshly created View instance, pre-configured with AbstractUrlBasedView's properties
view
)

Apply the containing ApplicationContext's lifecycle methods to the given View instance, if such a context is available.

protected AbstractUrlBasedView

Returns:

the View instance
buildView
(String
the name of the view to build
viewName
)

Creates a new View instance of the specified view class and configures it.

protected boolean

Returns:

whether this resolver applies to the specified view
canHandle
(String
the name of the view to retrieve
viewName
,
Locale
the Locale to retrieve the view for
locale
)

Indicates whether this org.springframework.web.servlet.ViewResolver can handle the supplied view name.

protected View
createView(String
the name of the view to retrieve
viewName
,
Locale
the Locale to retrieve the view for
locale
)

Overrides org.springframework.web.servlet.view.AbstractCachingViewResolver.createView.

Overridden to implement check for "redirect:" prefix.

public Map<String, Object>
getAttributesMap()

Allow Map access to the static attributes for views returned by this resolver, with the option to add or override specific entries.

protected Object
getCacheKey(String viewName, Locale locale)

Overrides org.springframework.web.servlet.view.AbstractCachingViewResolver.getCacheKey.

This implementation returns just the view name, as this ViewResolver doesn't support localized resolution.

protected String
getContentType()

Return the content type for all views, if any.

protected Boolean
protected String[]
protected Boolean
getExposePathVariables()

Return whether views resolved by this resolver should add path variables to the model or not.

public int
getOrder()

Implements org.springframework.core.Ordered.getOrder.

Get the order value of this object.

protected String
getPrefix()

Return the prefix that gets prepended to view names when building a URL.

public String[]
getRedirectHosts()

Return the configured application hosts for redirect purposes.

protected String
getRequestContextAttribute()

Return the name of the RequestContext attribute for all views, if any.

protected String
getSuffix()

Return the suffix that gets appended to view names when building a URL.

protected Class<?>
getViewClass()

Return the view class to be used to create views.

protected String[]
getViewNames()

Return the view names (or name patterns) that can be handled by this org.springframework.web.servlet.ViewResolver.

protected void
initApplicationContext()

Overrides org.springframework.context.support.ApplicationObjectSupport.initApplicationContext.

Subclasses can override this for custom initialization behavior.

protected AbstractUrlBasedView

Returns:

a new instance of the view class
instantiateView
()

Instantiate the specified view class.

protected boolean
isRedirectContextRelative()

Return whether to interpret a given redirect URL that starts with a slash ("/") as relative to the current ServletContext, i.e. as relative to the web application root.

protected boolean
isRedirectHttp10Compatible()

Return whether redirects should stay compatible with HTTP 1.0 clients.

protected View

Returns:

the View instance
loadView
(String
the name of the view to retrieve
viewName
,
Locale
the Locale to retrieve the view for
locale
)

Implements abstract org.springframework.web.servlet.view.AbstractCachingViewResolver.loadView.

Delegates to buildView for creating a new instance of the specified view class.

protected Class<?>
requiredViewClass()

Return the required type of view for this resolver.

public void
setAttributes(Properties props)

Set static attributes from a java.util.Properties object, for all views returned by this resolver.

public void
setAttributesMap(Map<String, ?>
a Map with name Strings as keys and attribute objects as values
attributes
)

Set static attributes from a Map, for all views returned by this resolver.

public void
setContentType(String contentType)

Set the content type for all views.

public void
setExposeContextBeansAsAttributes(boolean exposeContextBeansAsAttributes)

Set whether to make all Spring beans in the application context accessible as request attributes, through lazy checking once an attribute gets accessed.

public void
setExposedContextBeanNames(String... exposedContextBeanNames)

Specify the names of beans in the context which are supposed to be exposed.

public void
setExposePathVariables(Boolean
  • true - all Views resolved by this resolver will expose path variables
  • false - no Views resolved by this resolver will expose path variables
  • null - individual Views can decide for themselves (this is used by default)
exposePathVariables
)

Specify whether views resolved by this resolver should add path variables to the model or not.

public void
setOrder(int order)

Specify the order value for this ViewResolver bean.

public void
setPrefix(String prefix)

Set the prefix that gets prepended to view names when building a URL.

public void
setRedirectContextRelative(boolean redirectContextRelative)

Set whether to interpret a given redirect URL that starts with a slash ("/") as relative to the current ServletContext, i.e. as relative to the web application root.

public void
setRedirectHosts(String...
one or more application hosts
redirectHosts
)

Configure one or more hosts associated with the application.

public void
setRedirectHttp10Compatible(boolean redirectHttp10Compatible)

Set whether redirects should stay compatible with HTTP 1.0 clients.

public void
setRequestContextAttribute(String
name of the RequestContext attribute
requestContextAttribute
)

Set the name of the RequestContext attribute for all views.

public void
setSuffix(String suffix)

Set the suffix that gets appended to view names when building a URL.

public void
setViewClass(Class<?>
a class that is assignable to the required view class (by default: AbstractUrlBasedView)
viewClass
)

Set the view class that should be used to create views.

public void
setViewNames(String... viewNames)

Set the view names (or name patterns) that can be handled by this org.springframework.web.servlet.ViewResolver.

Inherited from org.springframework.web.servlet.view.AbstractCachingViewResolver:
clearCachegetCacheFiltergetCacheLimitisCacheisCacheUnresolvedremoveFromCacheresolveViewNamesetCachesetCacheFiltersetCacheLimitsetCacheUnresolved

Field Detail

contentTypeback to summary
private String contentType
Annotations
@Nullable
exposeContextBeansAsAttributesback to summary
private Boolean exposeContextBeansAsAttributes
Annotations
@Nullable
exposedContextBeanNamesback to summary
private String[] exposedContextBeanNames
Annotations
@Nullable
exposePathVariablesback to summary
private Boolean exposePathVariables
Annotations
@Nullable
FORWARD_URL_PREFIXback to summary
public static final String FORWARD_URL_PREFIX

Prefix for special view names that specify a forward URL (usually to a controller after a form has been submitted and processed). Such view names will not be resolved in the configured default way but rather be treated as special shortcut.

orderback to summary
private int order
prefixback to summary
private String prefix
REDIRECT_URL_PREFIXback to summary
public static final String REDIRECT_URL_PREFIX

Prefix for special view names that specify a redirect URL (usually to a controller after a form has been submitted and processed). Such view names will not be resolved in the configured default way but rather be treated as special shortcut.

redirectContextRelativeback to summary
private boolean redirectContextRelative
redirectHostsback to summary
private String[] redirectHosts
Annotations
@Nullable
redirectHttp10Compatibleback to summary
private boolean redirectHttp10Compatible
requestContextAttributeback to summary
private String requestContextAttribute
Annotations
@Nullable
staticAttributesback to summary
private final Map<String, Object> staticAttributes

Map of static attributes, keyed by attribute name (String).

suffixback to summary
private String suffix
viewClassback to summary
private Class<?> viewClass
Annotations
@Nullable
viewNamesback to summary
private String[] viewNames
Annotations
@Nullable

Constructor Detail

UrlBasedViewResolverback to summary
public UrlBasedViewResolver()

Method Detail

applyLifecycleMethodsback to summary
protected View applyLifecycleMethods(String viewName, AbstractUrlBasedView view)

Apply the containing ApplicationContext's lifecycle methods to the given View instance, if such a context is available.

Parameters
viewName:String

the name of the view

view:AbstractUrlBasedView

the freshly created View instance, pre-configured with AbstractUrlBasedView's properties

Returns:View

the View instance to use (either the original one or a decorated variant)

Since
5.0
See Also
getApplicationContext(), ApplicationContext#getAutowireCapableBeanFactory(), org.springframework.beans.factory.config.AutowireCapableBeanFactory#initializeBean
buildViewback to summary
protected AbstractUrlBasedView buildView(String viewName) throws Exception

Creates a new View instance of the specified view class and configures it. Does not perform any lookup for pre-defined View instances.

Spring lifecycle methods as defined by the bean container do not have to be called here; those will be applied by the loadView method after this method returns.

Subclasses will typically call super.buildView(viewName) first, before setting further properties themselves. loadView will then apply Spring lifecycle methods at the end of this process.

Parameters
viewName:String

the name of the view to build

Returns:AbstractUrlBasedView

the View instance

Exceptions
Exception:
if the view couldn't be resolved
See Also
loadView(String, java.util.Locale)
canHandleback to summary
protected boolean canHandle(String viewName, Locale locale)

Indicates whether this org.springframework.web.servlet.ViewResolver can handle the supplied view name. If not, createView(String, java.util.Locale) will return null. The default implementation checks against the configured view names.

Parameters
viewName:String

the name of the view to retrieve

locale:Locale

the Locale to retrieve the view for

Returns:boolean

whether this resolver applies to the specified view

See Also
org.springframework.util.PatternMatchUtils#simpleMatch(String, String)
createViewback to summary
protected View createView(String viewName, Locale locale) throws Exception

Overrides org.springframework.web.servlet.view.AbstractCachingViewResolver.createView.

Overridden to implement check for "redirect:" prefix.

Not possible in loadView, since overridden loadView versions in subclasses might rely on the superclass always creating instances of the required view class.

Parameters
viewName:String

Doc from org.springframework.web.servlet.view.AbstractCachingViewResolver.createView.

the name of the view to retrieve

locale:Locale

Doc from org.springframework.web.servlet.view.AbstractCachingViewResolver.createView.

the Locale to retrieve the view for

Returns:View

Doc from org.springframework.web.servlet.view.AbstractCachingViewResolver.createView.

the View instance, or null if not found (optional, to allow for ViewResolver chaining)

Annotations
@Override
Exceptions
Exception:

Doc from org.springframework.web.servlet.view.AbstractCachingViewResolver.createView.

if the view couldn't be resolved

See Also
loadView, requiredViewClass
getAttributesMapback to summary
public Map<String, Object> getAttributesMap()

Allow Map access to the static attributes for views returned by this resolver, with the option to add or override specific entries.

Useful for specifying entries directly, for example via attributesMap[myKey]. This is particularly useful for adding or overriding entries in child view definitions.

getCacheKeyback to summary
protected Object getCacheKey(String viewName, Locale locale)

Overrides org.springframework.web.servlet.view.AbstractCachingViewResolver.getCacheKey.

This implementation returns just the view name, as this ViewResolver doesn't support localized resolution.

Annotations
@Override
getContentTypeback to summary
protected String getContentType()

Return the content type for all views, if any.

Annotations
@Nullable
getExposeContextBeansAsAttributesback to summary
protected Boolean getExposeContextBeansAsAttributes()
Annotations
@Nullable
getExposedContextBeanNamesback to summary
protected String[] getExposedContextBeanNames()
Annotations
@Nullable
getExposePathVariablesback to summary
protected Boolean getExposePathVariables()

Return whether views resolved by this resolver should add path variables to the model or not.

Annotations
@Nullable
getOrderback to summary
public int getOrder()

Implements org.springframework.core.Ordered.getOrder.

Doc from org.springframework.core.Ordered.getOrder.

Get the order value of this object.

Higher values are interpreted as lower priority. As a consequence, the object with the lowest value has the highest priority (somewhat analogous to Servlet load-on-startup values).

Same order values will result in arbitrary sort positions for the affected objects.

Returns:int

the order value

Annotations
@Override
getPrefixback to summary
protected String getPrefix()

Return the prefix that gets prepended to view names when building a URL.

getRedirectHostsback to summary
public String[] getRedirectHosts()

Return the configured application hosts for redirect purposes.

Annotations
@Nullable
Since
4.3
getRequestContextAttributeback to summary
protected String getRequestContextAttribute()

Return the name of the RequestContext attribute for all views, if any.

Annotations
@Nullable
getSuffixback to summary
protected String getSuffix()

Return the suffix that gets appended to view names when building a URL.

getViewClassback to summary
protected Class<?> getViewClass()

Return the view class to be used to create views.

Annotations
@Nullable
See Also
setViewClass
getViewNamesback to summary
protected String[] getViewNames()

Return the view names (or name patterns) that can be handled by this org.springframework.web.servlet.ViewResolver.

Annotations
@Nullable
initApplicationContextback to summary
protected void initApplicationContext()

Overrides org.springframework.context.support.ApplicationObjectSupport.initApplicationContext.

Doc from org.springframework.context.support.ApplicationObjectSupport.initApplicationContext.

Subclasses can override this for custom initialization behavior.

The default implementation is empty. Called by initApplicationContext(ApplicationContext).

Annotations
@Override
instantiateViewback to summary
protected AbstractUrlBasedView instantiateView()

Instantiate the specified view class.

The default implementation uses reflection to instantiate the class.

Returns:AbstractUrlBasedView

a new instance of the view class

Since
5.3
See Also
setViewClass
isRedirectContextRelativeback to summary
protected boolean isRedirectContextRelative()

Return whether to interpret a given redirect URL that starts with a slash ("/") as relative to the current ServletContext, i.e. as relative to the web application root.

isRedirectHttp10Compatibleback to summary
protected boolean isRedirectHttp10Compatible()

Return whether redirects should stay compatible with HTTP 1.0 clients.

loadViewback to summary
protected View loadView(String viewName, Locale locale) throws Exception

Implements abstract org.springframework.web.servlet.view.AbstractCachingViewResolver.loadView.

Delegates to buildView for creating a new instance of the specified view class. Applies the following Spring lifecycle methods (as supported by the generic Spring bean factory):

  • ApplicationContextAware's setApplicationContext
  • InitializingBean's afterPropertiesSet
Parameters
viewName:String

the name of the view to retrieve

locale:Locale

Doc from org.springframework.web.servlet.view.AbstractCachingViewResolver.loadView.

the Locale to retrieve the view for

Returns:View

the View instance

Annotations
@Override
Exceptions
Exception:
if the view couldn't be resolved
See Also
buildView(String), org.springframework.context.ApplicationContextAware#setApplicationContext, org.springframework.beans.factory.InitializingBean#afterPropertiesSet
requiredViewClassback to summary
protected Class<?> requiredViewClass()

Return the required type of view for this resolver. This implementation returns AbstractUrlBasedView.

See Also
instantiateView(), AbstractUrlBasedView
setAttributesback to summary
public void setAttributes(Properties props)

Set static attributes from a java.util.Properties object, for all views returned by this resolver.

This is the most convenient way to set static attributes. Note that static attributes can be overridden by dynamic attributes, if a value with the same name is included in the model.

Can be populated with a String "value" (parsed via PropertiesEditor) or a "props" element in XML bean definitions.

See Also
org.springframework.beans.propertyeditors.PropertiesEditor, AbstractView#setAttributes
setAttributesMapback to summary
public void setAttributesMap(Map<String, ?> attributes)

Set static attributes from a Map, for all views returned by this resolver. This allows to set any kind of attribute values, for example bean references.

Can be populated with a "map" or "props" element in XML bean definitions.

Parameters
attributes:Map<String, ?>

a Map with name Strings as keys and attribute objects as values

See Also
AbstractView#setAttributesMap
setContentTypeback to summary
public void setContentType(String contentType)

Set the content type for all views.

May be ignored by view classes if the view itself is assumed to set the content type, e.g. in case of JSPs.

setExposeContextBeansAsAttributesback to summary
public void setExposeContextBeansAsAttributes(boolean exposeContextBeansAsAttributes)

Set whether to make all Spring beans in the application context accessible as request attributes, through lazy checking once an attribute gets accessed.

This will make all such beans accessible in plain ${...} expressions in a JSP 2.0 page, as well as in JSTL's c:out value expressions.

Default is "false".

See Also
AbstractView#setExposeContextBeansAsAttributes
setExposedContextBeanNamesback to summary
public void setExposedContextBeanNames(String... exposedContextBeanNames)

Specify the names of beans in the context which are supposed to be exposed. If this is non-null, only the specified beans are eligible for exposure as attributes.

See Also
AbstractView#setExposedContextBeanNames
setExposePathVariablesback to summary
public void setExposePathVariables(Boolean exposePathVariables)

Specify whether views resolved by this resolver should add path variables to the model or not.

The default setting is to let each View decide (see AbstractView#setExposePathVariables). However, you can use this property to override that.

Parameters
exposePathVariables:Boolean

  • true - all Views resolved by this resolver will expose path variables
  • false - no Views resolved by this resolver will expose path variables
  • null - individual Views can decide for themselves (this is used by default)
See Also
AbstractView#setExposePathVariables
setOrderback to summary
public void setOrder(int order)

Specify the order value for this ViewResolver bean.

The default value is Ordered.LOWEST_PRECEDENCE, meaning non-ordered.

See Also
org.springframework.core.Ordered#getOrder()
setPrefixback to summary
public void setPrefix(String prefix)

Set the prefix that gets prepended to view names when building a URL.

setRedirectContextRelativeback to summary
public void setRedirectContextRelative(boolean redirectContextRelative)

Set whether to interpret a given redirect URL that starts with a slash ("/") as relative to the current ServletContext, i.e. as relative to the web application root.

Default is "true": A redirect URL that starts with a slash will be interpreted as relative to the web application root, i.e. the context path will be prepended to the URL.

Redirect URLs can be specified via the "redirect:" prefix. E.g.: "redirect:myAction"

See Also
RedirectView#setContextRelative, REDIRECT_URL_PREFIX
setRedirectHostsback to summary
public void setRedirectHosts(String... redirectHosts)

Configure one or more hosts associated with the application. All other hosts will be considered external hosts.

In effect, this property provides a way turn off encoding on redirect via HttpServletResponse#encodeRedirectURL for URLs that have a host and that host is not listed as a known host.

If not set (the default) all URLs are encoded through the response.

Parameters
redirectHosts:String[]

one or more application hosts

Since
4.3
setRedirectHttp10Compatibleback to summary
public void setRedirectHttp10Compatible(boolean redirectHttp10Compatible)

Set whether redirects should stay compatible with HTTP 1.0 clients.

In the default implementation, this will enforce HTTP status code 302 in any case, i.e. delegate to HttpServletResponse.sendRedirect. Turning this off will send HTTP status code 303, which is the correct code for HTTP 1.1 clients, but not understood by HTTP 1.0 clients.

Many HTTP 1.1 clients treat 302 just like 303, not making any difference. However, some clients depend on 303 when redirecting after a POST request; turn this flag off in such a scenario.

Redirect URLs can be specified via the "redirect:" prefix. E.g.: "redirect:myAction"

See Also
RedirectView#setHttp10Compatible, REDIRECT_URL_PREFIX
setRequestContextAttributeback to summary
public void setRequestContextAttribute(String requestContextAttribute)

Set the name of the RequestContext attribute for all views.

Parameters
requestContextAttribute:String

name of the RequestContext attribute

See Also
AbstractView#setRequestContextAttribute
setSuffixback to summary
public void setSuffix(String suffix)

Set the suffix that gets appended to view names when building a URL.

setViewClassback to summary
public void setViewClass(Class<?> viewClass)

Set the view class that should be used to create views.

Parameters
viewClass:Class<?>

a class that is assignable to the required view class (by default: AbstractUrlBasedView)

See Also
requiredViewClass(), instantiateView(), AbstractUrlBasedView
setViewNamesback to summary
public void setViewNames(String... viewNames)

Set the view names (or name patterns) that can be handled by this org.springframework.web.servlet.ViewResolver. View names can contain simple wildcards such that 'my*', '*Report' and '*Repo*' will all match the view name 'myReport'.

See Also
canHandle