第一章:对静态资源的整合
java
@ConfigurationProperties(prefix
= "spring.resources", ignoreUnknownFields
= false)public
class ResourceProperties implements
ResourceLoaderAware
{//可以设置和静态资源有关的参数,缓存时间等
WebMvcAuotConfiguration:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
Integer cachePeriod = this.resourceProperties.getCachePeriod();
if (!registry.hasMappingForPattern("/webjars/**")) {
customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META‐INF/resources/webjars/").setCachePeriod(cachePeriod));
}
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
//静态资源文件夹映射
if (!registry.hasMappingForPattern(staticPathPattern)) {
customizeResourceHandlerRegistration(registry.
addResourceHandler(staticPathPattern).addResourceLocations(this.resourceProperties.getStaticLocations()).setCachePeriod(cachePeriod));
}
} /
/配置欢迎页映射
@Bean
public WelcomePageHandlerMapping welcomePageHandlerMapping(
ResourceProperties resourceProperties) {
return new WelcomePageHandlerMapping(resourceProperties.getWelcomePage(),
this.mvcProperties.getStaticPathPattern());
}
//配置喜欢的图标
@Configuration
@ConditionalOnProperty(value = "spring.mvc.favicon.enabled", matchIfMissing = true)
public static class FaviconConfiguration {
private final ResourceProperties resourceProperties;
public FaviconConfiguration(ResourceProperties resourceProperties) {
this.resourceProperties = resourceProperties;
}
@Bean
public SimpleUrlHandlerMapping faviconHandlerMapping() {
SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
mapping.setOrder(Ordered.HIGHEST_PRECEDENCE + 1);
//所有 **/favicon.ico
mapping.setUrlMap(Collections.singletonMap("**/favicon.ico",
faviconRequestHandler());
return mapping;
}
@Bean
public ResourceHttpRequestHandler faviconRequestHandler() {
ResourceHttpRequestHandler requestHandler = new ResourceHttpRequestHandler();
requestHandler.setLocations(this.resourceProperties.getFaviconLocations());
return requestHandler;
}
}
}
-
所有 /webjars/**,都去 classpath:/META-INF/resources/webjars/ 中找资源
-
webjars:以 jar 包方式引入静态资源WebJars - Web Libraries in Jars
-
导入依赖:
XML<!‐‐引入jquery‐webjar‐‐>在访问的时候只需要写webjars下面资源的名称即可 <dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.3.1</version> </dependency>
-
/**:访问当前项目的任何资,都去(静态资源文件夹)找映射
XML"classpath:/META‐INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" "/":当前项目的根路径
-
首页:静态资源文件夹下的所有 index.html 页面,被 /** 映射
- localhost:端口号/index页面
第二章:模板引擎
JSP、Velocity、Freemarker、Thymeleaf:
- SpringBoot 推荐的 Thymeleaf:语法更简单,功能更强大
引入 thymeleaf:
XML
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
-
从 Spring 父文件中能看到 SpringBoot 2.0.1 所使用的 thymeleaf 版本是 3.0.9
-
SpringBoot 启动的时候会自动配置:
- org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration
-
从 ThymeleafAutoConfiguration 的源代码中我们可以得知 ThymelaefProperties 中配置了 Thymeleaf 的规则:
javapublic class ThymeleafProperties { private static final Charset DEFAULT_ENCODING; public static final String DEFAULT_PREFIX = "classpath:/templates/"; public static final String DEFAULT_SUFFIX = ".html"; private boolean checkTemplate = true; private boolean checkTemplateLocation = true; private String prefix = "classpath:/templates/"; private String suffix = ".html"; private String mode = "HTML"; private Charset encoding; private boolean cache; }
-
使用 html 作为模板,而且默认的前缀是放在 classpath:/templates/ 下,后缀是 .html
-
这些属性可以通过 application.properties 来修改
示例:
-
在 templates 下创建一个 success.html
-
在 html 中引入 thymeleaf 的命名空间
java<html lang="en" xmlns:th="http://www.thymeleaf.org">
-
创建一个 Controller 提供一个访问的方法:
java@RequestMapping("/success")public String hello(Model model){ model.addAttribute("hello","<h1>zhangsan</h1>"); return "success"; }
-
在 thymeleaf 模板中取值:
java<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 "http://www.w3.org/TR/html4/loose.dtd" Transitional//EN"> html lang="en" xmlns:th="http://www.thymeleaf.org"> head> title>Title</title> head> body> div th:text="${hello}"> </div> body> html>