public class ResourceHttpRequestHandler extends WebContentGenerator implements HttpRequestHandler, EmbeddedValueResolverAware, InitializingBean, CorsConfigurationSource
HttpRequestHandler that serves static resources in an optimized way
 according to the guidelines of Page Speed, YSlow, etc.
 The "locations" property takes a list of Spring
 Resource locations from which static resources are allowed to be served
 by this handler. Resources could be served from a classpath location, e.g.
 "classpath:/META-INF/public-web-resources/", allowing convenient packaging
 and serving of resources such as .js, .css, and others in jar files.
 
This request handler may also be configured with a
 resourcesResolver and
 resourceTransformer chains to support
 arbitrary resolution and transformation of resources being served. By default
 a PathResourceResolver simply finds resources based on the configured
 "locations". An application can configure additional resolvers and transformers
 such as the VersionResourceResolver which can resolve and prepare URLs
 for resources with a version in the URL.
 
This handler also properly evaluates the Last-Modified header
 (if present) so that a 304 status code will be returned as appropriate,
 avoiding unnecessary overhead for resources that are already cached by the client.
HEADER_CACHE_CONTROL, METHOD_GET, METHOD_HEAD, METHOD_POST| Constructor and Description | 
|---|
| ResourceHttpRequestHandler() | 
| Modifier and Type | Method and Description | 
|---|---|
| void | afterPropertiesSet()Invoked by the containing  BeanFactoryafter it has set all bean properties
 and satisfiedBeanFactoryAware,ApplicationContextAwareetc. | 
| ContentNegotiationManager | getContentNegotiationManager()Return the configured content negotiation manager. | 
| CorsConfiguration | getCorsConfiguration(HttpServletRequest request)Return the specified CORS configuration. | 
| List<Resource> | getLocations()Return the configured  ListofResourcelocations. | 
| protected MediaType | getMediaType(HttpServletRequest request,
            Resource resource)Determine the media type for the given request and the resource matched
 to it. | 
| protected Resource | getResource(HttpServletRequest request) | 
| ResourceHttpMessageConverter | getResourceHttpMessageConverter()Return the configured resource converter. | 
| ResourceRegionHttpMessageConverter | getResourceRegionHttpMessageConverter()Return the configured resource region converter. | 
| List<ResourceResolver> | getResourceResolvers()Return the list of configured resource resolvers. | 
| List<ResourceTransformer> | getResourceTransformers()Return the list of configured resource transformers. | 
| UrlPathHelper | getUrlPathHelper()The configured  UrlPathHelper. | 
| void | handleRequest(HttpServletRequest request,
             HttpServletResponse response)Processes a resource request. | 
| protected void | initAllowedLocations()Look for a  PathResourceResolveramong the configured resource
 resolvers and set itsallowedLocationsproperty (if empty) to
 match thelocationsconfigured on this class. | 
| protected PathExtensionContentNegotiationStrategy | initContentNegotiationStrategy()Initialize the content negotiation strategy depending on the  ContentNegotiationManagersetup and the availability of aServletContext. | 
| protected boolean | isInvalidPath(String path)Identifies invalid resource paths. | 
| protected String | processPath(String path)Process the given resource path. | 
| void | setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager)Configure a  ContentNegotiationManagerto help determine the
 media types for resources being served. | 
| void | setCorsConfiguration(CorsConfiguration corsConfiguration)Specify the CORS configuration for resources served by this handler. | 
| void | setEmbeddedValueResolver(StringValueResolver resolver)Set the StringValueResolver to use for resolving embedded definition values. | 
| protected void | setHeaders(HttpServletResponse response,
          Resource resource,
          MediaType mediaType)Set headers on the given servlet response. | 
| void | setLocations(List<Resource> locations)Set the  ListofResourcelocations to use as sources
 for serving static resources. | 
| void | setLocationValues(List<String> locationValues)An alternative to  setLocations(List)that accepts a list of
 String-based location values, with support forUrlResource's
 (e.g. | 
| void | setResourceHttpMessageConverter(ResourceHttpMessageConverter messageConverter)Configure the  ResourceHttpMessageConverterto use. | 
| void | setResourceRegionHttpMessageConverter(ResourceRegionHttpMessageConverter messageConverter)Configure the  ResourceRegionHttpMessageConverterto use. | 
| void | setResourceResolvers(List<ResourceResolver> resourceResolvers)Configure the list of  ResourceResolversto use. | 
| void | setResourceTransformers(List<ResourceTransformer> resourceTransformers)Configure the list of  ResourceTransformersto use. | 
| void | setUrlPathHelper(UrlPathHelper urlPathHelper)Provide a reference to the  UrlPathHelperused to map requests to
 static resources. | 
| String | toString() | 
applyCacheControl, applyCacheSeconds, applyCacheSeconds, cacheForSeconds, cacheForSeconds, checkAndPrepare, checkAndPrepare, checkRequest, getAllowHeader, getCacheControl, getCacheSeconds, getSupportedMethods, getVaryByRequestHeaders, isAlwaysMustRevalidate, isRequireSession, isUseCacheControlHeader, isUseCacheControlNoStore, isUseExpiresHeader, prepareResponse, preventCaching, setAlwaysMustRevalidate, setCacheControl, setCacheSeconds, setRequireSession, setSupportedMethods, setUseCacheControlHeader, setUseCacheControlNoStore, setUseExpiresHeader, setVaryByRequestHeadersgetServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContextgetApplicationContext, getMessageSourceAccessor, initApplicationContext, obtainApplicationContext, requiredContextClass, setApplicationContextpublic void setLocationValues(List<String> locationValues)
setLocations(List) that accepts a list of
 String-based location values, with support for UrlResource's
 (e.g. files or HTTP URLs) with a special prefix to indicate the charset
 to use when appending relative paths. For example
 "[charset=Windows-31J]https://example.org/path".public void setLocations(List<Resource> locations)
List of Resource locations to use as sources
 for serving static resources.setLocationValues(List)public List<Resource> getLocations()
List of Resource locations.
 Note that if locationValues are provided,
 instead of loaded Resource-based locations, this method will return
 empty until after initialization via afterPropertiesSet().
public void setResourceResolvers(@Nullable List<ResourceResolver> resourceResolvers)
ResourceResolvers to use.
 By default PathResourceResolver is configured. If using this property,
 it is recommended to add PathResourceResolver as the last resolver.
public List<ResourceResolver> getResourceResolvers()
public void setResourceTransformers(@Nullable List<ResourceTransformer> resourceTransformers)
ResourceTransformers to use.
 By default no transformers are configured for use.
public List<ResourceTransformer> getResourceTransformers()
public void setResourceHttpMessageConverter(@Nullable ResourceHttpMessageConverter messageConverter)
ResourceHttpMessageConverter to use.
 By default a ResourceHttpMessageConverter will be configured.
@Nullable public ResourceHttpMessageConverter getResourceHttpMessageConverter()
public void setResourceRegionHttpMessageConverter(@Nullable ResourceRegionHttpMessageConverter messageConverter)
ResourceRegionHttpMessageConverter to use.
 By default a ResourceRegionHttpMessageConverter will be configured.
@Nullable public ResourceRegionHttpMessageConverter getResourceRegionHttpMessageConverter()
public void setContentNegotiationManager(@Nullable ContentNegotiationManager contentNegotiationManager)
ContentNegotiationManager to help determine the
 media types for resources being served. If the manager contains a path
 extension strategy it will be checked for registered file extension.@Nullable public ContentNegotiationManager getContentNegotiationManager()
public void setCorsConfiguration(CorsConfiguration corsConfiguration)
By default this is not set in which allows cross-origin requests.
@Nullable public CorsConfiguration getCorsConfiguration(HttpServletRequest request)
getCorsConfiguration in interface CorsConfigurationSourceCorsConfiguration, or null if nonepublic void setUrlPathHelper(@Nullable UrlPathHelper urlPathHelper)
UrlPathHelper used to map requests to
 static resources. This helps to derive information about the lookup path
 such as whether it is decoded or not.@Nullable public UrlPathHelper getUrlPathHelper()
UrlPathHelper.public void setEmbeddedValueResolver(StringValueResolver resolver)
EmbeddedValueResolverAwaresetEmbeddedValueResolver in interface EmbeddedValueResolverAwarepublic void afterPropertiesSet()
                        throws Exception
InitializingBeanBeanFactory after it has set all bean properties
 and satisfied BeanFactoryAware, ApplicationContextAware etc.
 This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.
afterPropertiesSet in interface InitializingBeanException - in the event of misconfiguration (such as failure to set an
 essential property) or if initialization fails for any other reasonprotected void initAllowedLocations()
PathResourceResolver among the configured resource
 resolvers and set its allowedLocations property (if empty) to
 match the locations configured on this class.protected PathExtensionContentNegotiationStrategy initContentNegotiationStrategy()
ContentNegotiationManager
 setup and the availability of a ServletContext.public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
Checks for the existence of the requested resource in the configured list of locations.
 If the resource does not exist, a 404 response will be returned to the client.
 If the resource exists, the request will be checked for the presence of the
 Last-Modified header, and its value will be compared against the last-modified
 timestamp of the given resource, returning a 304 status code if the
 Last-Modified value  is greater. If the resource is newer than the
 Last-Modified value, or the header is not present, the content resource
 of the resource will be written to the response with caching headers
 set to expire one year in the future.
handleRequest in interface HttpRequestHandlerrequest - current HTTP requestresponse - current HTTP responseServletException - in case of general errorsIOException - in case of I/O errors@Nullable protected Resource getResource(HttpServletRequest request) throws IOException
IOExceptionprotected String processPath(String path)
The default implementation replaces:
"  / // foo/bar"
 becomes "/foo/bar".
 protected boolean isInvalidPath(String path)
StringUtils.cleanPath(java.lang.String).
 valid URL or would represent one after the leading slash is removed.
 Note: this method assumes that leading, duplicate '/' or control characters (e.g. white space) have been trimmed so that the path starts predictably with a single '/' or does not have one.
path - the path to validatetrue if the path is invalid, false otherwise@Nullable protected MediaType getMediaType(HttpServletRequest request, Resource resource)
ServletPathExtensionContentNegotiationStrategy.getMediaTypeForResource(org.springframework.core.io.Resource).request - the current requestresource - the resource to checknull if none foundprotected void setHeaders(HttpServletResponse response, Resource resource, @Nullable MediaType mediaType) throws IOException
response - current servlet responseresource - the identified resource (never null)mediaType - the resource's media type (never null)IOException - in case of errors while setting the headers