diff --git a/spring-boot-autoconfigure/pom.xml b/spring-boot-autoconfigure/pom.xml old mode 100644 new mode 100755 index c48f742d4ec..dad3956b82c --- a/spring-boot-autoconfigure/pom.xml +++ b/spring-boot-autoconfigure/pom.xml @@ -588,5 +588,11 @@ snakeyaml test + + org.apache.tomcat.embed + tomcat-embed-jasper + ${tomcat.version} + test + diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProvider.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProvider.java old mode 100644 new mode 100755 index 5d1ff661def..d07bf4a5ee3 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProvider.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * Copyright 2012-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,9 @@ package org.springframework.boot.autoconfigure.web; import org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider; +import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.core.env.Environment; +import org.springframework.core.env.PropertyResolver; import org.springframework.core.io.ResourceLoader; import org.springframework.util.ClassUtils; @@ -32,24 +34,17 @@ import org.springframework.util.ClassUtils; public class JspTemplateAvailabilityProvider implements TemplateAvailabilityProvider { @Override - public boolean isTemplateAvailable(String view, Environment environment, - ClassLoader classLoader, ResourceLoader resourceLoader) { + public boolean isTemplateAvailable(String view, Environment environment, ClassLoader classLoader, ResourceLoader resourceLoader) { if (ClassUtils.isPresent("org.apache.jasper.compiler.JspConfig", classLoader)) { - String prefix = getProperty(environment, "spring.mvc.view.prefix", - "spring.view.prefix", WebMvcAutoConfiguration.DEFAULT_PREFIX); - String suffix = getProperty(environment, "spring.mvc.view.suffix", - "spring.view.suffix", WebMvcAutoConfiguration.DEFAULT_SUFFIX); + PropertyResolver resolver = new RelaxedPropertyResolver(environment, + "spring.mvc.view."); + String prefix = resolver.getProperty("prefix", + WebMvcAutoConfiguration.DEFAULT_PREFIX); + String suffix = resolver.getProperty("suffix", + WebMvcAutoConfiguration.DEFAULT_SUFFIX); return resourceLoader.getResource(prefix + view + suffix).exists(); } return false; } - private String getProperty(Environment environment, String key, String deprecatedKey, - String defaultValue) { - if (environment.containsProperty(key)) { - return environment.getProperty(key); - } - return environment.getProperty(deprecatedKey, defaultValue); - } - } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProviderTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProviderTests.java new file mode 100755 index 00000000000..34920cad91a --- /dev/null +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/JspTemplateAvailabilityProviderTests.java @@ -0,0 +1,65 @@ +/* + * Copyright 2012-2016 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.autoconfigure.web; + +import org.junit.Test; + +import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.core.io.ResourceLoader; +import org.springframework.mock.env.MockEnvironment; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +/** + * Tests for {@link JspTemplateAvailabilityProvider}. + * + * @author Yunkun Huang + */ +public class JspTemplateAvailabilityProviderTests { + + private final JspTemplateAvailabilityProvider provider = new JspTemplateAvailabilityProvider(); + + private final ResourceLoader resourceLoader = new DefaultResourceLoader(); + + private final MockEnvironment environment = new MockEnvironment(); + + @Test + public void availabilityOfTemplateThatDoesNotExist() { + assertFalse(this.provider.isTemplateAvailable("whatever", this.environment, + getClass().getClassLoader(), this.resourceLoader)); + } + + @Test + public void availabilityOfTemplateWithCustomPrefix() { + this.environment.setProperty("spring.mvc.view.prefix", + "classpath:/custom-templates/"); + + assertTrue(this.provider.isTemplateAvailable("custom.jsp", this.environment, + getClass().getClassLoader(), this.resourceLoader)); + } + + @Test + public void availabilityOfTemplateWithCustomSuffix() { + this.environment.setProperty("spring.mvc.view.prefix", "classpath:/custom-templates/"); + this.environment.setProperty("spring.mvc.view.suffix", ".jsp"); + + assertTrue(this.provider.isTemplateAvailable("suffixed", this.environment, + getClass().getClassLoader(), this.resourceLoader)); + } + +} diff --git a/spring-boot-autoconfigure/src/test/resources/custom-templates/custom.jsp b/spring-boot-autoconfigure/src/test/resources/custom-templates/custom.jsp new file mode 100755 index 00000000000..e69de29bb2d diff --git a/spring-boot-autoconfigure/src/test/resources/custom-templates/suffixed.jsp b/spring-boot-autoconfigure/src/test/resources/custom-templates/suffixed.jsp new file mode 100755 index 00000000000..e69de29bb2d