使用SpringBoot开发web应用的步骤:
1. 创建SpringBoot应用,选择需要的starter(启动器)
2. 在SpringBoot中,可以直接写业务逻辑代码,只有很小的配置在配置文件
web开发的自动配置类:WebMvcAutoConfiguration。自动配置类,会在项目启动的时候直接配置到容器中。
一、关于静态资源的映射 :
1. 静态资源的默认位置
查看源码::WebMvcAutoConfiguration(自动配置类)->addResourceHandlers(ResourceHandlerRegistry registry)->getStaticLocations()->
staticLocations(这是一个字符串数组,指向一个不可变的数组常量)->CLASSPATH_RESOURCE_LOCATIONS.
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/",
"classpath:/resources/", "classpath:/static/", "classpath:/public/" };
- “classpath:/META-INF/resources/”;
- “classpath:/resources/”,
- “classpath:/static/”,
- “classpath:/public/”
- “classpath:/” (这个在springboot2.0中已经被删除)
当访问静态资源时,会到所有资源静态文件夹去查找,当然,也可在配置文件中去设置静态资源文件夹目录,具体代码如下:
spring.web.resources.static-locations=classpath:/static,classpath:/public
2. 欢迎页:
WebMvcAutoConfiguration中的内部类:->welcomePageHandlerMapping() 方法->getWelcomePage()->getIndexHtml(String location)
getIndexHtml(String location)的具体示例代码如下:
private Resource getIndexHtml(Resource location) {
try {
Resource resource = location.createRelative("index.html");
if (resource.exists() && (resource.getURL() != null)) {
return resource;
}
}
catch (Exception ex) {
}
return null;
}
将index.html页面放到任意一个静态资源文件夹中,就可以访问欢迎页面!
提醒:欢迎页面和静态资源所在的文件夹中的位置,都必须放在系统指定的四个路径下面,但欢迎页面必须以index.html来命名!
3. IOC图标
WebMvcAutoConfiguration中自动配置类的内部类:->FaviconConfiguration->faviconHandlerMapping()方法,将名为:favicon.ico的图标放到类路径下四个静态资源位置,就可以在客户端浏览器的ico处显示图标。
二、模板引擎(Thymeleaf)
1.简介
目前java web开发推荐使用模板引擎,不建议使用jsp页面
- jsp缺点:本质上就是servlet,需要后台进行编译,这个过程需要花时间,效率低;
- 模板引擎:不需要编译,速度较快;
常用的模板引擎有哪些:
- Freemarker
- Velocity,
hymelear
SpringBoot推荐使用Thymeleaf模板引擎,SpringBoot不支持jsp页面,因为Jsp必须打成war包
补充:目前主流的WEB开发,他更推荐前后端分离,前端会使用一些MVVM框架:Vue.js,Angular,React等
2.Thymeleaf使用步骤
步骤:
- 添加相应的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.5.2</version>
</dependency>
- 将HTML页面放到templates目录中
- templates目录下的html页面不能够直接访问,需要在Controller层Bean来通过Request中的URL映射到html页面。
如何映射
:找到期前缀、后缀 - ThymeleafAutoConfiguration类是一个自动配置类,他提供了视图解析、渲染的功能!
- 查找
ThymeleafAutoConfiguration
自动配置类->从注解@EnableConfiguratinProperties()
中找到ThymeleafProperties
属性配置类->从参数中找到前缀、后缀标识。
private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8;
public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";
可以通过配置文件application.properties文件来修改存放的目录
- 使用thymeleaf模板引擎
- 可以使用参考手册:
usingthymeleaf.pdf
,可以从网站:https://www.thymeleaf.org/index.html进行文档下载
- 修改页面后,如何让页面实时生效?
- 由于thymeleaf默认使用了缓存,在这里,
只要禁用thymeleaf的缓存就可以
:
https://www.thymeleaf.org/index.html
- 补充:
还需要开启IDEA中的自动编译。
IDEA自动保存时不会自动编译的!同时,运行中的项目是不会自动编译的,所以在需要修改两个地方。具体操作如下:
3.常用属性及语法规则
thymeleaf模板引擎,都是做为html标签的属性来使用,具体用法:th:语法内容
- 常用的属性:
th:text
th:utext
设置元素中的文本内容(th:text对特殊字符进行转义,而th:utext不对特殊字符中行转义)
使用内联方式,可以在元素中添加内容,就不会覆盖了
1. th:text 等价内联方式:[[${text}]] 可以转义
2. th:utext 等价内联方式: [(${text})] 不能转义
- th:html
原生属性,所表达的意思是:html标签中所有的属性th:都有,主要目的是替换html原有的值,例如:
<div id="mynewid" title="hello this is good!" th:id="${id}" th:title="${title}">hello java</div>
th:if 条件判断
他是一个判断语句,用于html模板中,从Request中得到数据,判断条件是否成立,如果成立的话,就输出标签体中的内容
在springboot中的内容
modelMap.addAttribute("age",18);
在html中的内容
<div th:if="${age>17}">hello</div>
主要意思是指:当if条件满足时,输出内容,不满足的时候,不显示内容
h:switch th:case
th:switch 和 th:case作用:和java中的switch:case语句的用法一样
,他是在html模板中使用的
modelMap.addAttribute("shenfeng","teacher");
在html中的内容
<p th:switch="${shenfeng}">
<span th:case="admin">管理员</span>
<span th:case="teacher">教师</span>
<span th:case="student">学生</span>
</p>
th:each
th:each主要做用是对Request中的某个属性进行循环,将循环结果传递给迭代变量,这个迭代变量也是存储到Request中的属性,然后再从标签体中,用th:text来读取迭代变更的值。
在springboot中的内容
modelMap.addAttribute("ulist", Arrays.asList("tom","good","hello"));
在html中的内容
<ul>
<li th:each="name:${ulist}" th:text="${name}"></li>
</ul>
th:object
主要用来对数据进行绑定,与th:field结合进行使用,用于表单数据对象的绑定,将表单绑