springboot学习,idea版本
springboot中访问静态资源
- 在创建的空的springboot项目中,编辑器自动默认创建我们可以看到的两个静态资源管理package,但是根据源码来看,其实还有很多存储静态资源访问的路径,且优先级还不同。
首先打开WebMvcAutoConfiguration.class文件,定位到添加静态资源管理这个函数即:
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
} else {
this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
registration.addResourceLocations(this.resourceProperties.getStaticLocations());
if (this.servletContext != null) {
ServletContextResource resource = new ServletContextResource(this.servletContext, "/");
registration.addResourceLocations(new Resource[]{resource});
}
});
}
}
分析:
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
}
首先判断是否自定义了静态资源路径,如果有,那么就返回。
怎么自定义资源路径?往上找到,WebMvcProperties.class,点进去,就可以看到很多类的属性变量,我们在yaml文件中,对这些属性变量进行设置。同时,还有可以自定义资源路径。
我们可以看到,这个箭头指定的路径,是根目录下的所有包路径。所以理论上可以随意设置,取名字存储静态资源,前提是在yaml文件中配置好。
2. Webjars方式导入静态资源
this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
以maven依赖的方式,导入我们的静态资源。访问webjars官网,以依赖的方式,导入pom.xml文件
之后,我们在jar包管理中,展开jar包目录,就可以看到**/META-INF/resources/webjars/**下的静态资源,通过浏览器我们就可以访问了。
途中的五个位置都支持,静态资源的访问。没有的文件夹,就可以自己创建。
总结:
- 在springboot中,我们可以使用以下方式处理静态资源
- webjars localhost:8080/webjars/
- public,static,/**,resource, localhost:8080
- 优先级:resource>static(默认)>public
首页如何定制
在WebMvcAutoConfiguration.class文件中,定义了关于首页的定制代码,大致的意思是可以寻找我们所设置的静态路径下的设置的index.html文件,作为首页。
源码设置的是寻找/**下的index.html。所以你理论上如果没有自定义设置,应该都可以访问到。
模板引擎
在springboot中,不支持jsp。需要引入模板引擎来访问页面。
pom.xml文件中,引入thymeleaf的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
查询thymeleafProperties.class文件后,会发现文件定义了templates的访问路径,即期文件夹下的模板文件.html。所以以后我们将我们的html文件放到这个templates下即可。
测试thymeleaf的语法:
@RequestMapping("/test")
public String index(Model model){
model.addAttribute("msg","hello,springboot!");
return "test";
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
《所有的html元素都可以被thymeleaf替换接管,th: 元素名》
<!--<h1>test</h1>-->
<div th:text="${msg}"></div>
</body>
</html>
可以看到值被取出了。
扩展springMVC(未学习完)
在springboot中,有非常多的XXXXConfiguration帮助我们进行扩展配置,只要看见了这个东西,我们就要注意了。