Polish WebMvcAutoConfiguration resource locations

pull/9/head
Phillip Webb 11 years ago
parent 728829ba81
commit 772cc851a0

@ -70,6 +70,31 @@ import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
@AutoConfigureAfter(EmbeddedServletContainerAutoConfiguration.class) @AutoConfigureAfter(EmbeddedServletContainerAutoConfiguration.class)
public class WebMvcAutoConfiguration { public class WebMvcAutoConfiguration {
private static final String[] SERVLET_RESOURCE_LOCATIONS = { "/" };
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/" };
private static final String[] RESOURCE_LOCATIONS;
static {
RESOURCE_LOCATIONS = new String[CLASSPATH_RESOURCE_LOCATIONS.length
+ SERVLET_RESOURCE_LOCATIONS.length];
System.arraycopy(SERVLET_RESOURCE_LOCATIONS, 0, RESOURCE_LOCATIONS, 0,
SERVLET_RESOURCE_LOCATIONS.length);
System.arraycopy(CLASSPATH_RESOURCE_LOCATIONS, 0, RESOURCE_LOCATIONS,
SERVLET_RESOURCE_LOCATIONS.length, CLASSPATH_RESOURCE_LOCATIONS.length);
}
private static final String[] STATIC_INDEX_HTML_RESOURCES;
static {
STATIC_INDEX_HTML_RESOURCES = new String[CLASSPATH_RESOURCE_LOCATIONS.length];
for (int i = 0; i < STATIC_INDEX_HTML_RESOURCES.length; i++) {
STATIC_INDEX_HTML_RESOURCES[i] = CLASSPATH_RESOURCE_LOCATIONS[i]
+ "index.html";
}
}
// Defined as a nested config to ensure WebMvcConfigurerAdapter it not read when not // Defined as a nested config to ensure WebMvcConfigurerAdapter it not read when not
// on the classpath // on the classpath
@EnableWebMvc @EnableWebMvc
@ -125,27 +150,22 @@ public class WebMvcAutoConfiguration {
@Override @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) { public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/", registry.addResourceHandler("/resources/**").addResourceLocations(
"classpath:/META-INF/resources/", "classpath:/resources/", RESOURCE_LOCATIONS);
"classpath:/public/", "classpath:/static/"); registry.addResourceHandler("/**").addResourceLocations(RESOURCE_LOCATIONS);
registry.addResourceHandler("/**").addResourceLocations("/",
"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/");
} }
// Special case for static home page
@Override @Override
public void addViewControllers(ViewControllerRegistry registry) { public void addViewControllers(ViewControllerRegistry registry) {
if (this.resourceLoader.getResource("classpath:/static/index.html").exists()) { addStaticIndexHtmlViewControllers(registry);
registry.addViewController("/").setViewName("/index.html");
} }
else if (this.resourceLoader.getResource("classpath:/public/index.html")
.exists()) { private void addStaticIndexHtmlViewControllers(ViewControllerRegistry registry) {
for (String resource : STATIC_INDEX_HTML_RESOURCES) {
if (this.resourceLoader.getResource(resource).exists()) {
registry.addViewController("/").setViewName("/index.html"); registry.addViewController("/").setViewName("/index.html");
return;
} }
else if (this.resourceLoader.getResource("classpath:/resources/index.html")
.exists()) {
registry.addViewController("/").setViewName("/index.html");
} }
} }

Loading…
Cancel
Save