Class ResourceHttpRequestHandler
- All Implemented Interfaces:
- Aware,- InitializingBean,- ApplicationContextAware,- EmbeddedValueResolverAware,- ServletContextAware,- CorsConfigurationSource,- HttpRequestHandler
HttpRequestHandler that serves static resources in an optimized way
 according to the guidelines of Page Speed, YSlow, etc.
 The properties "locations" and "locationValues" accept locations from which static resources can be served by this handler. This can be relative to the root of the web application, or from the classpath, 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.
- Since:
- 3.0.4
- Author:
- Keith Donald, Jeremy Grelle, Juergen Hoeller, Arjen Poutsma, Brian Clozel, Rossen Stoyanchev
- 
Field SummaryFields inherited from class org.springframework.web.servlet.support.WebContentGeneratorHEADER_CACHE_CONTROL, METHOD_GET, METHOD_HEAD, METHOD_POST
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptionvoidInvoked by the containingBeanFactoryafter it has set all bean properties and satisfiedBeanFactoryAware,ApplicationContextAwareetc.Deprecated.as of 5.2.4getCorsConfiguration(HttpServletRequest request) Return the specified CORS configuration.Return the configuredListofResourcelocations including both String-based locations provided viasetLocationValuesand pre-resolvedResourcelocations provided viasetLocations.protected MediaTypegetMediaType(HttpServletRequest request, Resource resource) Determine the media type for the given request and the resource matched to it.Return theconfiguredmedia types.protected ResourcegetResource(HttpServletRequest request) Return the configured resource converter.Return the configured resource region converter.Return the list of configured resource resolvers.Return the list of configured resource transformers.The configuredUrlPathHelper.voidhandleRequest(HttpServletRequest request, HttpServletResponse response) Processes a resource request.protected voidLook for aPathResourceResolveramong the configured resource resolvers and set itsallowedLocationsproperty (if empty) to match thelocationsconfigured on this class.protected PathExtensionContentNegotiationStrategyDeprecated.as of 5.2.4 this method returnsnull, and if a subclass returns an actual instance, the instance is used only as a source of media type mappings, if it contains any.protected booleanisInvalidPath(String path) Identifies invalid resource paths.booleanReturn whether to optimize the specified locations through an existence check on startup, filtering non-existing directories upfront so that they do not have to be checked on every resource access.booleanReturn whether theResource.lastModified()information is used to drive HTTP responses when serving static resources.protected StringprocessPath(String path) Process the given resource path.voidsetContentNegotiationManager(ContentNegotiationManager contentNegotiationManager) Deprecated.as of 5.2.4 in favor of usingsetMediaTypes(Map)with mappings possibly obtained fromContentNegotiationManager.getMediaTypeMappings().voidsetCorsConfiguration(CorsConfiguration corsConfiguration) Specify the CORS configuration for resources served by this handler.voidsetEmbeddedValueResolver(StringValueResolver resolver) Set the StringValueResolver to use for resolving embedded definition values.protected voidsetHeaders(HttpServletResponse response, Resource resource, MediaType mediaType) Set headers on the given servlet response.voidsetLocations(List<Resource> locations) Configure locations to serve resources from as pre-resourced Resource's.voidsetLocationValues(List<String> locations) Configure String-based locations to serve resources from.voidsetMediaTypes(Map<String, MediaType> mediaTypes) Add mappings between file extensions, extracted from the filename of a staticResource, and corresponding media type to set on the response.voidsetOptimizeLocations(boolean optimizeLocations) Set whether to optimize the specified locations through an existence check on startup, filtering non-existing directories upfront so that they do not have to be checked on every resource access.voidsetResourceHttpMessageConverter(ResourceHttpMessageConverter messageConverter) Configure theResourceHttpMessageConverterto use.voidsetResourceRegionHttpMessageConverter(ResourceRegionHttpMessageConverter messageConverter) Configure theResourceRegionHttpMessageConverterto use.voidsetResourceResolvers(List<ResourceResolver> resourceResolvers) Configure the list ofResourceResolversto use.voidsetResourceTransformers(List<ResourceTransformer> resourceTransformers) Configure the list ofResourceTransformersto use.voidsetUrlPathHelper(UrlPathHelper urlPathHelper) Provide a reference to theUrlPathHelperused to map requests to static resources.voidsetUseLastModified(boolean useLastModified) Set whether we should look at theResource.lastModified()when serving resources and use this information to drive"Last-Modified"HTTP response headers.toString()Methods inherited from class org.springframework.web.servlet.support.WebContentGeneratorapplyCacheControl, applyCacheSeconds, applyCacheSeconds, cacheForSeconds, cacheForSeconds, checkAndPrepare, checkRequest, getAllowHeader, getCacheControl, getCacheSeconds, getSupportedMethods, getVaryByRequestHeaders, isAlwaysMustRevalidate, isRequireSession, isUseCacheControlHeader, isUseCacheControlNoStore, isUseExpiresHeader, prepareResponse, preventCaching, setAlwaysMustRevalidate, setCacheControl, setCacheSeconds, setRequireSession, setSupportedMethods, setUseCacheControlHeader, setUseCacheControlNoStore, setUseExpiresHeader, setVaryByRequestHeadersMethods inherited from class org.springframework.web.context.support.WebApplicationObjectSupportgetServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContextMethods inherited from class org.springframework.context.support.ApplicationObjectSupportgetApplicationContext, getMessageSourceAccessor, initApplicationContext, obtainApplicationContext, requiredContextClass, setApplicationContext
- 
Constructor Details- 
ResourceHttpRequestHandlerpublic ResourceHttpRequestHandler()
 
- 
- 
Method Details- 
setLocationValuesConfigure String-based locations to serve resources from.For example, { "/","classpath:/META-INF/public-web-resources/"} allows resources to be served both from the web application root and from any JAR on the classpath that contains a/META-INF/public-web-resources/directory, with resources in the web application root taking precedence.For URL-based resources(e.g. files, HTTP URLs, etc) this method supports a special prefix to indicate the charset associated with the URL so that relative paths appended to it can be encoded correctly, for example"[charset=Windows-31J]https://example.org/path".- Since:
- 4.3.13
- See Also:
 
- 
setLocationsConfigure locations to serve resources from as pre-resourced Resource's.- See Also:
 
- 
getLocationsReturn the configuredListofResourcelocations including both String-based locations provided viasetLocationValuesand pre-resolvedResourcelocations provided viasetLocations.Note that the returned list is fully initialized only after initialization via afterPropertiesSet().Note: As of 5.3.11 the list of locations may be filtered to exclude those that don't actually exist and therefore the list returned from this method may be a subset of all given locations. See setOptimizeLocations(boolean).
- 
setResourceResolversConfigure the list ofResourceResolversto use.By default PathResourceResolveris configured. If using this property, it is recommended to addPathResourceResolveras the last resolver.
- 
getResourceResolversReturn the list of configured resource resolvers.
- 
setResourceTransformersConfigure the list ofResourceTransformersto use.By default no transformers are configured for use. 
- 
getResourceTransformersReturn the list of configured resource transformers.
- 
setResourceHttpMessageConverterpublic void setResourceHttpMessageConverter(@Nullable ResourceHttpMessageConverter messageConverter) Configure theResourceHttpMessageConverterto use.By default a ResourceHttpMessageConverterwill be configured.- Since:
- 4.3
 
- 
getResourceHttpMessageConverterReturn the configured resource converter.- Since:
- 4.3
 
- 
setResourceRegionHttpMessageConverterpublic void setResourceRegionHttpMessageConverter(@Nullable ResourceRegionHttpMessageConverter messageConverter) Configure theResourceRegionHttpMessageConverterto use.By default a ResourceRegionHttpMessageConverterwill be configured.- Since:
- 4.3
 
- 
getResourceRegionHttpMessageConverterReturn the configured resource region converter.- Since:
- 4.3
 
- 
setContentNegotiationManager@Deprecated public void setContentNegotiationManager(@Nullable ContentNegotiationManager contentNegotiationManager) Deprecated.as of 5.2.4 in favor of usingsetMediaTypes(Map)with mappings possibly obtained fromContentNegotiationManager.getMediaTypeMappings().Configure aContentNegotiationManagerto 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.- Since:
- 4.3
 
- 
getContentNegotiationManagerDeprecated.as of 5.2.4Return the configured content negotiation manager.- Since:
- 4.3
 
- 
setMediaTypesAdd mappings between file extensions, extracted from the filename of a staticResource, and corresponding media type to set on the response.Use of this method is typically not necessary since mappings are otherwise determined via ServletContext.getMimeType(String)or viaMediaTypeFactory.getMediaType(Resource).- Parameters:
- mediaTypes- media type mappings
- Since:
- 5.2.4
 
- 
getMediaTypesReturn theconfiguredmedia types.- Since:
- 5.2.4
 
- 
setCorsConfigurationSpecify the CORS configuration for resources served by this handler.By default this is not set in which allows cross-origin requests. 
- 
getCorsConfigurationReturn the specified CORS configuration.- Specified by:
- getCorsConfigurationin interface- CorsConfigurationSource
- Returns:
- the associated CorsConfiguration, ornullif none
 
- 
setUrlPathHelperProvide a reference to theUrlPathHelperused to map requests to static resources. This helps to derive information about the lookup path such as whether it is decoded or not.- Since:
- 4.3.13
 
- 
getUrlPathHelperThe configuredUrlPathHelper.- Since:
- 4.3.13
 
- 
setUseLastModifiedpublic void setUseLastModified(boolean useLastModified) Set whether we should look at theResource.lastModified()when serving resources and use this information to drive"Last-Modified"HTTP response headers.This option is enabled by default and should be turned off if the metadata of the static files should be ignored. - Since:
- 5.3
 
- 
isUseLastModifiedpublic boolean isUseLastModified()Return whether theResource.lastModified()information is used to drive HTTP responses when serving static resources.- Since:
- 5.3
 
- 
setOptimizeLocationspublic void setOptimizeLocations(boolean optimizeLocations) Set whether to optimize the specified locations through an existence check on startup, filtering non-existing directories upfront so that they do not have to be checked on every resource access.The default is false, for defensiveness against zip files without directory entries which are unable to expose the existence of a directory upfront. Switch this flag totruefor optimized access in case of a consistent jar layout with directory entries.- Since:
- 5.3.13
 
- 
isOptimizeLocationspublic boolean isOptimizeLocations()Return whether to optimize the specified locations through an existence check on startup, filtering non-existing directories upfront so that they do not have to be checked on every resource access.- Since:
- 5.3.13
 
- 
setEmbeddedValueResolverDescription copied from interface:EmbeddedValueResolverAwareSet the StringValueResolver to use for resolving embedded definition values.- Specified by:
- setEmbeddedValueResolverin interface- EmbeddedValueResolverAware
 
- 
afterPropertiesSetDescription copied from interface:InitializingBeanInvoked by the containingBeanFactoryafter it has set all bean properties and satisfiedBeanFactoryAware,ApplicationContextAwareetc.This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set. - Specified by:
- afterPropertiesSetin interface- InitializingBean
- Throws:
- Exception- in the event of misconfiguration (such as failure to set an essential property) or if initialization fails for any other reason
 
- 
initAllowedLocationsprotected void initAllowedLocations()Look for aPathResourceResolveramong the configured resource resolvers and set itsallowedLocationsproperty (if empty) to match thelocationsconfigured on this class.
- 
initContentNegotiationStrategy@Nullable @Deprecated protected PathExtensionContentNegotiationStrategy initContentNegotiationStrategy()Deprecated.as of 5.2.4 this method returnsnull, and if a subclass returns an actual instance, the instance is used only as a source of media type mappings, if it contains any. Please, usesetMediaTypes(Map)instead, or if you need to change behavior, you can overridegetMediaType(HttpServletRequest, Resource).Initialize the strategy to use to determine the media type for a resource.
- 
handleRequestpublic void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException Processes a resource request.Checks for the existence of the requested resource in the configured list of locations. If the resource does not exist, a 404response will be returned to the client. If the resource exists, the request will be checked for the presence of theLast-Modifiedheader, and its value will be compared against the last-modified timestamp of the given resource, returning a304status code if theLast-Modifiedvalue is greater. If the resource is newer than theLast-Modifiedvalue, 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.- Specified by:
- handleRequestin interface- HttpRequestHandler
- Parameters:
- request- current HTTP request
- response- current HTTP response
- Throws:
- ServletException- in case of general errors
- IOException- in case of I/O errors
 
- 
getResource- Throws:
- IOException
 
- 
processPathProcess the given resource path.The default implementation replaces: - Backslash with forward slash.
- Duplicate occurrences of slash with a single slash.
- Any combination of leading slash and control characters (00-1F and 7F)
 with a single "/" or "". For example " / // foo/bar"becomes"/foo/bar".
 - Since:
- 3.2.12
 
- 
isInvalidPathIdentifies invalid resource paths. By default, rejects:- Paths that contain "WEB-INF" or "META-INF"
- Paths that contain "../" after a call to
 StringUtils.cleanPath(java.lang.String).
- Paths that represent a valid URLor 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. - Parameters:
- path- the path to validate
- Returns:
- trueif the path is invalid,- falseotherwise
- Since:
- 3.0.6
 
- 
getMediaTypeDetermine the media type for the given request and the resource matched to it. This implementation tries to determine the MediaType using one of the following lookups based on the resource filename and its path extension:- Parameters:
- request- the current request
- resource- the resource to check
- Returns:
- the corresponding media type, or nullif none found
 
- 
setHeadersprotected void setHeaders(HttpServletResponse response, Resource resource, @Nullable MediaType mediaType) throws IOException Set headers on the given servlet response. Called for GET requests as well as HEAD requests.- Parameters:
- response- current servlet response
- resource- the identified resource (never- null)
- mediaType- the resource's media type (never- null)
- Throws:
- IOException- in case of errors while setting the headers
 
- 
toString
 
-