1.SpringMVC 下获取 web 资源的功能实现
WebMvcAutoConfiguration ( mvc 自动配置类)中的添加资源处理器代码如下 :
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 如果静态资源已经自定义,就失效了
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
} else {
Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();
//webjars 比较热门的有 jquery,npm,Bootstrap, 以 maven 的方式去 import
if (!registry.hasMappingForPattern("/webjars/**"))
this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
}
// 方法二:获得资源路径
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
if (!registry.hasMappingForPattern(staticPathPattern))
this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
}
}
}
SpringMVC 下定制首页
WebMvcAutoConfiguration ( mvc 自动配置类)中的获得首页代码如下 :
@Bean
public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext) {
//
return new WelcomePageHandlerMapping(new TemplateAvailabilityProviders(applicationContext), applicationContext, this.getWelcomePage(), this.mvcProperties.getStaticPathPattern());
}
static String[] getResourceLocations(String[] staticLocations) {
String[] locations = new String[staticLocations.length + WebMvcAutoConfiguration.SERVLET_LOCATIONS.length];
System.arraycopy(staticLocations, 0, locations, 0, staticLocations.length);
System.arraycopy(WebMvcAutoConfiguration.SERVLET_LOCATIONS, 0, locations, staticLocations.length, WebMvcAutoConfiguration.SERVLET_LOCATIONS.length);
return locations;
}
private Optional
String[] locations = getResourceLocations(this.resourceProperties.getStaticLocations());
return Arrays.stream(locations).map(this::getIndexHtml).filter(this::isReadable).findFirst();
}
//index 是默认的首页文件名
private Resource getIndexHtml(String location) {
return this.resourceLoader.getResource(location + "index.html");
}
注:springboot 中,在 template 目录下的所有页面只能通过 Controller 来跳转!给个例子
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class CanController {
@GetMapping("/first")
public String say(){
return "begin";
begin.html 中的内容:
This is a template for Excavator. It includes a jumbotron.Use it as a starting point to create something more unique..
这是一个小测试而已