Class ResourceHttpRequestHandler

  extended by
      extended by
          extended by
              extended by org.springframework.web.servlet.resource.ResourceHttpRequestHandler
All Implemented Interfaces:
Aware, ApplicationContextAware, ServletContextAware, HttpRequestHandler

public class ResourceHttpRequestHandler
extends WebContentGenerator
implements HttpRequestHandler

HttpRequestHandler that serves static resources optimized for superior browser performance (according to the guidelines of Page Speed, YSlow, etc.) by allowing for flexible cache settings ("cacheSeconds" property, last-modified support).

The "locations" property takes a list of Spring Resource locations from which static resources are allowed to be served by this handler. For a given request, the list of locations will be consulted in order for the presence of the requested resource, and the first found match will be written to the response, with Expires and Cache-Control headers set as configured. The 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. The use of Resource locations allows resource requests to easily be mapped to locations other than the web application root. For example, resources could be served from a classpath location such as "classpath:/META-INF/public-web-resources/", allowing convenient packaging and serving of resources such as a JavaScript library from within jar files.

To ensure that users with a primed browser cache get the latest changes to application-specific resources upon deployment of new versions of the application, it is recommended that a version string is used in the URL mapping pattern that selects this handler. Such patterns can be easily parameterized using Spring EL. See the reference manual for further examples of this approach.

Rather than being directly configured as a bean, this handler will typically be configured through use of the <mvc:resources/> XML configuration element.

Keith Donald, Jeremy Grelle, Juergen Hoeller

Field Summary
private  java.util.List<Resource> locations
Fields inherited from class
Fields inherited from class
Constructor Summary
Method Summary
protected  MediaType getMediaType(Resource resource)
          Determine an appropriate media type for the given resource.
protected  Resource getResource(HttpServletRequest request)
 void handleRequest(HttpServletRequest request, HttpServletResponse response)
          Processes a resource request.
protected  boolean isInvalidPath(java.lang.String path)
          Validates the given path: returns true if the given path is not a valid resource path.
protected  void setHeaders(HttpServletResponse response, Resource resource, MediaType mediaType)
          Set headers on the given servlet response.
 void setLocations(java.util.List<Resource> locations)
          Set a List of Resource paths to use as sources for serving static resources.
protected  void writeContent(HttpServletResponse response, Resource resource)
          Write the actual content out to the given servlet response, streaming the resource's content.
Methods inherited from class
applyCacheSeconds, applyCacheSeconds, cacheForSeconds, cacheForSeconds, checkAndPrepare, checkAndPrepare, getCacheSeconds, getSupportedMethods, isRequireSession, isUseCacheControlHeader, isUseCacheControlNoStore, isUseExpiresHeader, preventCaching, setCacheSeconds, setRequireSession, setSupportedMethods, setUseCacheControlHeader, setUseCacheControlNoStore, setUseExpiresHeader
Methods inherited from class
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext
Methods inherited from class
getApplicationContext, getMessageSourceAccessor, initApplicationContext, requiredContextClass, setApplicationContext
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Field Detail


private java.util.List<Resource> locations
Constructor Detail


public ResourceHttpRequestHandler()
Method Detail


public void setLocations(java.util.List<Resource> locations)
Set a List of Resource paths to use as sources for serving static resources.


public void handleRequest(HttpServletRequest request,
                          HttpServletResponse response)
                   throws ServletException,
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 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.

Specified by:
handleRequest in interface HttpRequestHandler
request - current HTTP request
response - current HTTP response
ServletException - in case of general errors - in case of I/O errors


protected Resource getResource(HttpServletRequest request)


protected boolean isInvalidPath(java.lang.String path)
Validates the given path: returns true if the given path is not a valid resource path.

The default implementation rejects paths containing "WEB-INF" or "META-INF" as well as paths with relative paths ("../") that result in access of a parent directory.

path - the path to validate
true if the path has been recognized as invalid, false otherwise


protected MediaType getMediaType(Resource resource)
Determine an appropriate media type for the given resource.

resource - the resource to check
the corresponding media type, or null if none found


protected void setHeaders(HttpServletResponse response,
                          Resource resource,
                          MediaType mediaType)
Set headers on the given servlet response. Called for GET requests as well as HEAD requests.

response - current servlet response
resource - the identified resource (never null)
mediaType - the resource's media type (never null)
Throws: - in case of errors while setting the headers


protected void writeContent(HttpServletResponse response,
                            Resource resource)
Write the actual content out to the given servlet response, streaming the resource's content.

response - current servlet response
resource - the identified resource (never null)
Throws: - in case of errors while writing the content