|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.context.support.ApplicationObjectSupport org.springframework.web.context.support.WebApplicationObjectSupport org.springframework.web.servlet.support.WebContentGenerator org.springframework.web.servlet.resource.ResourceHttpRequestHandler
public class ResourceHttpRequestHandler
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 #setLocations "locations" property takes a list of Spring {@link 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 {@code Expires} and {@code Cache-Control} headers set as configured. The handler also properly evaluates the {@code Last-Modified} header (if present) so that a {@code 304} status code will be returned as appropriate, avoiding unnecessary overhead for resources that are already cached by the client. The use of {@code 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.
Field Summary |
---|
Fields inherited from class org.springframework.web.servlet.support.WebContentGenerator |
---|
METHOD_GET, METHOD_HEAD, METHOD_POST |
Fields inherited from class org.springframework.context.support.ApplicationObjectSupport |
---|
logger |
Constructor Summary | |
---|---|
ResourceHttpRequestHandler()
|
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 void |
setHeaders(HttpServletResponse response,
Resource resource,
MediaType mediaType)
Set headers on the given servlet response. |
void |
setLocations(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 org.springframework.web.servlet.support.WebContentGenerator |
---|
applyCacheSeconds, applyCacheSeconds, cacheForSeconds, cacheForSeconds, checkAndPrepare, checkAndPrepare, getCacheSeconds, getSupportedMethods, isRequireSession, isUseCacheControlHeader, isUseCacheControlNoStore, isUseExpiresHeader, preventCaching, setCacheSeconds, setRequireSession, setSupportedMethods, setUseCacheControlHeader, setUseCacheControlNoStore, setUseExpiresHeader |
Methods inherited from class org.springframework.web.context.support.WebApplicationObjectSupport |
---|
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext |
Methods inherited from class org.springframework.context.support.ApplicationObjectSupport |
---|
getApplicationContext, getMessageSourceAccessor, initApplicationContext, requiredContextClass, setApplicationContext |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public ResourceHttpRequestHandler()
Method Detail |
---|
public void setLocations(List<Resource> locations)
List
of Resource
paths to use as sources
for serving static resources.
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 HttpRequestHandler
request
- current HTTP requestresponse
- current HTTP response
ServletException
- in case of general errors
IOException
- in case of I/O errorsprotected Resource getResource(HttpServletRequest request)
protected MediaType getMediaType(Resource resource)
resource
- the resource to check
null
if none foundprotected void setHeaders(HttpServletResponse response, Resource resource, 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 headersprotected void writeContent(HttpServletResponse response, Resource resource) throws IOException
response
- current servlet responseresource
- the identified resource (never null
)
IOException
- in case of errors while writing the content
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |