From fded7496d583159d88a16d0af1d22c215012f832 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 16 Aug 2010 19:04:51 +0000 Subject: [PATCH] renamed "mapping-order" to "order"; added "cache-period" git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3598 50f2f4bb-b051-0410-bef5-90022cba6387 --- .../config/ResourcesBeanDefinitionParser.java | 26 +++++----- .../web/servlet/config/spring-mvc-3.0.xsd | 49 +++++++++++-------- .../web/servlet/config/MvcNamespaceTests.java | 4 -- .../mvc-config-resources-optional-attrs.xml | 2 +- 4 files changed, 43 insertions(+), 38 deletions(-) diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/ResourcesBeanDefinitionParser.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/ResourcesBeanDefinitionParser.java index c1a5ba1c240..03654ab9e5b 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/ResourcesBeanDefinitionParser.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/config/ResourcesBeanDefinitionParser.java @@ -16,14 +16,12 @@ package org.springframework.web.servlet.config; -import java.util.List; import java.util.Map; import org.w3c.dom.Element; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.parsing.BeanComponentDefinition; -import org.springframework.beans.factory.support.ManagedList; import org.springframework.beans.factory.support.ManagedMap; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.factory.xml.BeanDefinitionParser; @@ -54,7 +52,7 @@ class ResourcesBeanDefinitionParser extends AbstractHttpRequestHandlerBeanDefini private void registerResourceMappings(ParserContext parserContext, Element element, Object source) { String resourceHandlerName = registerResourceHandler(parserContext, element, source); - if (!StringUtils.hasText(resourceHandlerName)) { + if (resourceHandlerName == null) { return; } @@ -71,8 +69,9 @@ class ResourcesBeanDefinitionParser extends AbstractHttpRequestHandlerBeanDefini handlerMappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); handlerMappingDef.getPropertyValues().add("urlMap", urlMap); - String mappingOrder = element.getAttribute("mapping-order"); - handlerMappingDef.getPropertyValues().add("order", StringUtils.hasText(mappingOrder) ? mappingOrder : Ordered.LOWEST_PRECEDENCE - 1); + String order = element.getAttribute("order"); + // use a default of near-lowest precedence, still allowing for even lower precedence in other mappings + handlerMappingDef.getPropertyValues().add("order", StringUtils.hasText(order) ? order : Ordered.LOWEST_PRECEDENCE - 1); String beanName = parserContext.getReaderContext().generateBeanName(handlerMappingDef); parserContext.getRegistry().registerBeanDefinition(beanName, handlerMappingDef); @@ -83,20 +82,23 @@ class ResourcesBeanDefinitionParser extends AbstractHttpRequestHandlerBeanDefini String locationAttr = element.getAttribute("location"); if (!StringUtils.hasText(locationAttr)) { parserContext.getReaderContext().error("The 'location' attribute is required.", parserContext.extractSource(element)); - return ""; + return null; } - String[] locationPatterns = locationAttr.split(",\\s*"); - List locations = new ManagedList(); - for (String location : locationPatterns) { - locations.add(location); - } + RootBeanDefinition resourceHandlerDef = new RootBeanDefinition(ResourceHttpRequestHandler.class); resourceHandlerDef.setSource(source); resourceHandlerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); - resourceHandlerDef.getPropertyValues().add("locations", locations); + resourceHandlerDef.getPropertyValues().add("locations", StringUtils.commaDelimitedListToStringArray(locationAttr)); + + String cacheSeconds = element.getAttribute("cache-period"); + if (StringUtils.hasText(cacheSeconds)) { + resourceHandlerDef.getPropertyValues().add("cacheSeconds", cacheSeconds); + } + String beanName = parserContext.getReaderContext().generateBeanName(resourceHandlerDef); parserContext.getRegistry().registerBeanDefinition(beanName, resourceHandlerDef); parserContext.registerComponent(new BeanComponentDefinition(resourceHandlerDef, beanName)); return beanName; } + } diff --git a/org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.0.xsd b/org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.0.xsd index 0450d2082e3..f97d3b331a3 100644 --- a/org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.0.xsd +++ b/org.springframework.web.servlet/src/main/resources/org/springframework/web/servlet/config/spring-mvc-3.0.xsd @@ -10,8 +10,7 @@ - @@ -54,41 +53,49 @@ - - - + - - - + - + - + Specifies the cache period for the resources served by this resource handler, in seconds. + The default is to not send any cache headers but rather to rely on last-modified timestamps only. + Set this to 0 in order to send cache headers that prevent caching, or to a positive number of + seconds in order to send cache headers with the given max-age value. + ]]> - + + + + + + + diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java index 85218658ca9..bc80cb6ea6e 100644 --- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java +++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java @@ -203,7 +203,6 @@ public class MvcNamespaceTests { chain = mapping.getHandler(request); assertEquals(5, chain.getInterceptors().length); assertTrue(chain.getInterceptors()[4] instanceof WebRequestHandlerInterceptorAdapter); - } @Test @@ -465,7 +464,6 @@ public class MvcNamespaceTests { public void validate(Object target, Errors errors) { this.validatorInvoked = true; } - } private static class TestBean { @@ -482,7 +480,6 @@ public class MvcNamespaceTests { public void setField(String field) { this.field = field; } - } private static class TestMockServletContext extends MockServletContext { @@ -495,7 +492,6 @@ public class MvcNamespaceTests { return null; } } - } } diff --git a/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-resources-optional-attrs.xml b/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-resources-optional-attrs.xml index 9582c74d493..c38026b0a5e 100644 --- a/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-resources-optional-attrs.xml +++ b/org.springframework.web.servlet/src/test/resources/org/springframework/web/servlet/config/mvc-config-resources-optional-attrs.xml @@ -5,6 +5,6 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> - +