引入Thymeleaf
在pom.xml中添加如下代码,以引入Thymeleaf:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
定义一个视图——网页
注意:请务必在src/main/resources/templates路径下创建网页
- 文件名称home.html
- 文件内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HOME</title>
</head>
<body>
<h1>Welcome to...</h1>
<img alt="LOGO"
th:src="@{https://www.1zj.com/uploadfile/2019/0917/20190917082143439.jpg}"
style="width: 200px">
</body>
</html>
- 其中img标签的ht:src是Thymeleaf的语法,所有html标签的属性前加入th:就会被Thymeleaf代为处理(更加详细的内容之后再学习Thymeleaf)
- 其中,属性的值被@{}包围也是Thymeleaf的语法,标识取值是一个超链接(更加详细的内容之后再学习Thymeleaf)
定义一个接口——能够响应Web请求
- 在项目启动类同级创建一个名叫controller的包:用于存放所有接口定义
- 在controller包内创建HomeController.java
- 在HomeController中添加如下代码:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}
- 其中,类注解@Controller标识这个类是一个提供接口的类,且标识该类需要被Spring Boot管理
- 其中,方法注解@GetMapping("/")标识对来自“/”的GET请求进行响应,响应内容为:home页面的内容(如果类注解使用@RestController而不是@Controller的话,这里return的字符串就不代表返回home页面的内容了。而是直接响应字符串“home”给浏览器了)
启动项目,尝试访问
如图:
对整个请求过程进行单元测试
- 在src/test/java/下创建单元测试类:HomeControllerTest
- 填充如下代码:
import org.hamcrest.CoreMatchers;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import site.shenjie.study.spring.controller.HomeController;
@WebMvcTest(HomeController.class)
public class HomeControllerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void testHomePage() throws Exception {
// 对“/”发起GET请求
mockMvc.perform(MockMvcRequestBuilders.get("/"))
// 期待http状态码是200
.andExpect(MockMvcResultMatchers.status().isOk())
// 期待响应的网页是home
.andExpect(MockMvcResultMatchers.view().name("home"))
// 期待响应的内容中包含字符串“Welcome to...”
.andExpect(MockMvcResultMatchers.content().string(CoreMatchers.containsString("Welcome to...")));
}
}
- 注意类注解是@WebMvcTest(HomeController.class)而不再是传统的@SpringBootTest
- 注意注入的是MockMvc而不是HomeController
- 执行单元测试,可以看到:
- 控制台输出正常,如图:
- Junit单元测试结果正常,如图:
- 更改代码,将最后期望字符串由“Welcome to…”改为“欢迎…”,然后再进行单元测试,结果如下:
- 控制台会输出整个请求过程:
- Junit单元测试结果显示错误信息: