Class RequestContext

java.lang.Object
org.springframework.web.servlet.support.RequestContext
Direct Known Subclasses:
JspAwareRequestContext

public class RequestContext extends Object
Context holder for request-specific state, like current web application context, current locale, and potential binding errors. Provides easy access to localized messages and Errors instances.

Suitable for exposition to views, and usage within JSP's "useBean" tag, JSP scriptlets, JSTL EL, etc. Necessary for views that do not have access to the servlet request, like FreeMarker templates.

Can be instantiated manually, or automatically exposed to views as model attribute via AbstractView's "requestContextAttribute" property.

Will also work outside DispatcherServlet requests, accessing the root WebApplicationContext and using an appropriate fallback for the locale (the HttpServletRequest's primary locale).

Since:
03.03.2003
Author:
Juergen Hoeller, Rossen Stoyanchev
See Also:
  • Field Details

    • WEB_APPLICATION_CONTEXT_ATTRIBUTE

      public static final String WEB_APPLICATION_CONTEXT_ATTRIBUTE
      Request attribute to hold the current web application context for RequestContext usage. By default, the DispatcherServlet's context (or the root context as fallback) is exposed.
    • jstlPresent

      protected static final boolean jstlPresent
  • Constructor Details

    • RequestContext

      public RequestContext(HttpServletRequest request)
      Create a new RequestContext for the given request, using the request attributes for Errors retrieval.

      This only works with InternalResourceViews, as Errors instances are part of the model and not normally exposed as request attributes. It will typically be used within JSPs or custom tags.

      As of 6.2, this will work within a DispatcherServlet request as well as with the root WebApplicationContext (outside a DispatcherServlet).

      Parameters:
      request - current HTTP request
      See Also:
    • RequestContext

      public RequestContext(HttpServletRequest request, HttpServletResponse response)
      Create a new RequestContext for the given request, using the request attributes for Errors retrieval.

      This only works with InternalResourceViews, as Errors instances are part of the model and not normally exposed as request attributes. It will typically be used within JSPs or custom tags.

      As of 6.2, this will work within a DispatcherServlet request as well as with the root WebApplicationContext (outside a DispatcherServlet).

      Parameters:
      request - current HTTP request
      response - current HTTP response
      See Also:
    • RequestContext

      public RequestContext(HttpServletRequest request, @Nullable ServletContext servletContext)
      Create a new RequestContext for the given request, using the request attributes for Errors retrieval.

      This only works with InternalResourceViews, as Errors instances are part of the model and not normally exposed as request attributes. It will typically be used within JSPs or custom tags.

      If a ServletContext is specified, the RequestContext will also work with the root WebApplicationContext (outside a DispatcherServlet).

      Parameters:
      request - current HTTP request
      servletContext - the servlet context of the web application (can be null; necessary for fallback to root WebApplicationContext)
      See Also:
    • RequestContext

      public RequestContext(HttpServletRequest request, @Nullable Map<String,Object> model)
      Create a new RequestContext for the given request, using the given model attributes for Errors retrieval.

      This works with all View implementations. It will typically be used by View implementations.

      As of 6.2, this will work within a DispatcherServlet request as well as with the root WebApplicationContext (outside a DispatcherServlet).

      Parameters:
      request - current HTTP request
      model - the model attributes for the current view (can be null, using the request attributes for Errors retrieval)
      See Also:
    • RequestContext

      public RequestContext(HttpServletRequest request, @Nullable HttpServletResponse response, @Nullable ServletContext servletContext, @Nullable Map<String,Object> model)
      Create a new RequestContext for the given request, using the given model attributes for Errors retrieval.

      This works with all View implementations. It will typically be used by View implementations.

      If a ServletContext is specified, the RequestContext will also work with a root WebApplicationContext (outside a DispatcherServlet).

      Parameters:
      request - current HTTP request
      response - current HTTP response
      servletContext - the servlet context of the web application (can be null; necessary for fallback to root WebApplicationContext)
      model - the model attributes for the current view (can be null, using the request attributes for Errors retrieval)
      See Also:
  • Method Details

    • getRequest

      protected final HttpServletRequest getRequest()
      Return the underlying HttpServletRequest. Only intended for cooperating classes in this package.
    • getServletContext

      protected final @Nullable ServletContext getServletContext()
      Return the underlying ServletContext. Only intended for cooperating classes in this package.
    • getWebApplicationContext

      public final WebApplicationContext getWebApplicationContext()
      Return the current WebApplicationContext.
    • getModel

      public final @Nullable Map<String,Object> getModel()
      Return the model Map that this RequestContext encapsulates, if any.
      Returns:
      the populated model Map, or null if none available
    • getMessageSource

      public MessageSource getMessageSource()
      Return the MessageSource to use (typically the current WebApplicationContext).

      Note: As of 6.2, this method is non-final and therefore overridable.

    • getLocale

      public Locale getLocale()
      Return the current Locale (falling back to the request locale; never null).

      Typically coming from a DispatcherServlet's LocaleResolver. Also includes a fallback check for JSTL's Locale attribute.

      Note: As of 6.2, this method is non-final and therefore overridable.

      See Also:
    • getTimeZone

      public @Nullable TimeZone getTimeZone()
      Return the current TimeZone (or null if none derivable from the request).

      Typically coming from a DispatcherServlet's LocaleContextResolver. Also includes a fallback check for JSTL's TimeZone attribute.

      See Also:
    • getFallbackLocale

      protected Locale getFallbackLocale()
      Determine the fallback locale for this context.

      The default implementation checks for a JSTL locale attribute in request, session or application scope; if not found, returns the HttpServletRequest.getLocale().

      Returns:
      the fallback locale (never null)
      See Also:
    • getFallbackTimeZone

      protected @Nullable TimeZone getFallbackTimeZone()
      Determine the fallback time zone for this context.

      The default implementation checks for a JSTL time zone attribute in request, session or application scope; returns null if not found.

      Returns:
      the fallback time zone (or null if none derivable from the request)
    • changeLocale

      public void changeLocale(Locale locale)
      Change the current locale to the specified one, storing the new locale through the configured LocaleResolver.
      Parameters:
      locale - the new locale
      See Also:
    • changeLocale

      public void changeLocale(Locale locale, TimeZone timeZone)
      Change the current locale to the specified locale and time zone context, storing the new locale context through the configured LocaleResolver.
      Parameters:
      locale - the new locale
      timeZone - the new time zone
      See Also:
    • setDefaultHtmlEscape

      public void setDefaultHtmlEscape(boolean defaultHtmlEscape)
      (De)activate default HTML escaping for messages and errors, for the scope of this RequestContext.

      The default is the application-wide setting (the "defaultHtmlEscape" context-param in web.xml).

      See Also:
    • isDefaultHtmlEscape

      public boolean isDefaultHtmlEscape()
      Is default HTML escaping active? Falls back to false in case of no explicit default given.
    • getDefaultHtmlEscape

      public @Nullable Boolean getDefaultHtmlEscape()
      Return the default HTML escape setting, differentiating between no default specified and an explicit value.
      Returns:
      whether default HTML escaping is enabled (null = no explicit default)
    • isResponseEncodedHtmlEscape

      public boolean isResponseEncodedHtmlEscape()
      Is HTML escaping using the response encoding by default? If enabled, only XML markup significant characters will be escaped with UTF-* encodings.

      Falls back to true in case of no explicit default given, as of Spring 4.2.

      Since:
      4.1.2
    • getResponseEncodedHtmlEscape

      public @Nullable Boolean getResponseEncodedHtmlEscape()
      Return the default setting about use of response encoding for HTML escape setting, differentiating between no default specified and an explicit value.
      Returns:
      whether default use of response encoding HTML escaping is enabled (null = no explicit default)
      Since:
      4.1.2
    • setUrlPathHelper

      @Deprecated(since="7.0", forRemoval=true) public void setUrlPathHelper(UrlPathHelper urlPathHelper)
      Deprecated, for removal: This API element is subject to removal in a future version.
      use of PathMatcher and UrlPathHelper is deprecated for use at runtime in web modules in favor of parsed patterns with PathPatternParser.
      Set the UrlPathHelper to use for context path and request URI decoding. Can be used to pass a shared UrlPathHelper instance in.

      A default UrlPathHelper is always available.

    • getUrlPathHelper

      @Deprecated(since="7.0", forRemoval=true) public UrlPathHelper getUrlPathHelper()
      Deprecated, for removal: This API element is subject to removal in a future version.
      use of PathMatcher and UrlPathHelper is deprecated for use at runtime in web modules in favor of parsed patterns with PathPatternParser.
      Return the UrlPathHelper used for context path and request URI decoding. Can be used to configure the current UrlPathHelper.

      A default UrlPathHelper is always available.

    • getRequestDataValueProcessor

      public @Nullable RequestDataValueProcessor getRequestDataValueProcessor()
      Return the RequestDataValueProcessor instance to use obtained from the WebApplicationContext under the name "requestDataValueProcessor". Or null if no matching bean was found.
    • getContextPath

      public String getContextPath()
      Return the context path of the original request, that is, the path that indicates the current web application. This is useful for building links to other resources within the application.

      Delegates to the UrlPathHelper for decoding.

      See Also:
    • getContextUrl

      public String getContextUrl(String relativeUrl)
      Return a context-aware URl for the given relative URL.
      Parameters:
      relativeUrl - the relative URL part
      Returns:
      a URL that points back to the server with an absolute path (also URL-encoded accordingly)
    • getContextUrl

      public String getContextUrl(String relativeUrl, Map<String,?> params)
      Return a context-aware URl for the given relative URL with placeholders (named keys with braces {}). For example, send in a relative URL foo/{bar}?spam={spam} and a parameter map {bar=baz,spam=nuts} and the result will be [contextpath]/foo/baz?spam=nuts.
      Parameters:
      relativeUrl - the relative URL part
      params - a map of parameters to insert as placeholders in the url
      Returns:
      a URL that points back to the server with an absolute path (also URL-encoded accordingly)
    • getPathToServlet

      public String getPathToServlet()
      Return the path to URL mappings within the current servlet including the context path and the servlet path of the original request. This is useful for building links to other resources within the application where a servlet mapping of the style "/main/*" is used.

      Delegates to the UrlPathHelper to determine the context and servlet path.

    • getRequestUri

      public String getRequestUri()
      Return the request URI of the original request, that is, the invoked URL without parameters. This is particularly useful as HTML form action target, possibly in combination with the original query string.

      Delegates to the UrlPathHelper for decoding.

      See Also:
    • getQueryString

      public String getQueryString()
      Return the query string of the current request, that is, the part after the request path. This is particularly useful for building an HTML form action target in combination with the original request URI.

      Delegates to the UrlPathHelper for decoding.

      See Also:
    • getMessage

      public String getMessage(String code, String defaultMessage)
      Retrieve the message for the given code, using the "defaultHtmlEscape" setting.
      Parameters:
      code - the code of the message
      defaultMessage - the String to return if the lookup fails
      Returns:
      the message
    • getMessage

      public String getMessage(String code, Object @Nullable [] args, String defaultMessage)
      Retrieve the message for the given code, using the "defaultHtmlEscape" setting.
      Parameters:
      code - the code of the message
      args - arguments for the message, or null if none
      defaultMessage - the String to return if the lookup fails
      Returns:
      the message
    • getMessage

      public String getMessage(String code, @Nullable List<?> args, String defaultMessage)
      Retrieve the message for the given code, using the "defaultHtmlEscape" setting.
      Parameters:
      code - the code of the message
      args - arguments for the message as a List, or null if none
      defaultMessage - the String to return if the lookup fails
      Returns:
      the message
    • getMessage

      public String getMessage(String code, Object @Nullable [] args, String defaultMessage, boolean htmlEscape)
      Retrieve the message for the given code.
      Parameters:
      code - the code of the message
      args - arguments for the message, or null if none
      defaultMessage - the String to return if the lookup fails
      htmlEscape - if the message should be HTML-escaped
      Returns:
      the message
    • getMessage

      public String getMessage(String code) throws NoSuchMessageException
      Retrieve the message for the given code, using the "defaultHtmlEscape" setting.
      Parameters:
      code - the code of the message
      Returns:
      the message
      Throws:
      NoSuchMessageException - if not found
    • getMessage

      public String getMessage(String code, Object @Nullable [] args) throws NoSuchMessageException
      Retrieve the message for the given code, using the "defaultHtmlEscape" setting.
      Parameters:
      code - the code of the message
      args - arguments for the message, or null if none
      Returns:
      the message
      Throws:
      NoSuchMessageException - if not found
    • getMessage

      public String getMessage(String code, @Nullable List<?> args) throws NoSuchMessageException
      Retrieve the message for the given code, using the "defaultHtmlEscape" setting.
      Parameters:
      code - the code of the message
      args - arguments for the message as a List, or null if none
      Returns:
      the message
      Throws:
      NoSuchMessageException - if not found
    • getMessage

      public String getMessage(String code, Object @Nullable [] args, boolean htmlEscape) throws NoSuchMessageException
      Retrieve the message for the given code.
      Parameters:
      code - the code of the message
      args - arguments for the message, or null if none
      htmlEscape - if the message should be HTML-escaped
      Returns:
      the message
      Throws:
      NoSuchMessageException - if not found
    • getMessage

      public String getMessage(MessageSourceResolvable resolvable) throws NoSuchMessageException
      Retrieve the given MessageSourceResolvable (for example, an ObjectError instance), using the "defaultHtmlEscape" setting.
      Parameters:
      resolvable - the MessageSourceResolvable
      Returns:
      the message
      Throws:
      NoSuchMessageException - if not found
    • getMessage

      public String getMessage(MessageSourceResolvable resolvable, boolean htmlEscape) throws NoSuchMessageException
      Retrieve the given MessageSourceResolvable (for example, an ObjectError instance).
      Parameters:
      resolvable - the MessageSourceResolvable
      htmlEscape - if the message should be HTML-escaped
      Returns:
      the message
      Throws:
      NoSuchMessageException - if not found
    • getErrors

      public @Nullable Errors getErrors(String name)
      Retrieve the Errors instance for the given bind object, using the "defaultHtmlEscape" setting.
      Parameters:
      name - the name of the bind object
      Returns:
      the Errors instance, or null if not found
    • getErrors

      public @Nullable Errors getErrors(String name, boolean htmlEscape)
      Retrieve the Errors instance for the given bind object.
      Parameters:
      name - the name of the bind object
      htmlEscape - create an Errors instance with automatic HTML escaping?
      Returns:
      the Errors instance, or null if not found
    • getModelObject

      protected @Nullable Object getModelObject(String modelName)
      Retrieve the model object for the given model name, either from the model or from the request attributes.
      Parameters:
      modelName - the name of the model object
      Returns:
      the model object
    • getBindStatus

      public BindStatus getBindStatus(String path) throws IllegalStateException
      Create a BindStatus for the given bind object, using the "defaultHtmlEscape" setting.
      Parameters:
      path - the bean and property path for which values and errors will be resolved (for example, "person.age")
      Returns:
      the new BindStatus instance
      Throws:
      IllegalStateException - if no corresponding Errors object found
    • getBindStatus

      public BindStatus getBindStatus(String path, boolean htmlEscape) throws IllegalStateException
      Create a BindStatus for the given bind object, using the "defaultHtmlEscape" setting.
      Parameters:
      path - the bean and property path for which values and errors will be resolved (for example, "person.age")
      htmlEscape - create a BindStatus with automatic HTML escaping?
      Returns:
      the new BindStatus instance
      Throws:
      IllegalStateException - if no corresponding Errors object found