动态资源:spring boot 默认不支持jsp。
spring boot推荐使用thymeleaf
网页=模版+数据
引入thymeleaf:
https://docs.spring.io/spring-boot/docs/2.1.4.RELEASE/reference/htmlsingle/#using-boot-starter
thymeleaf官网:
thymeleaf 3.0的文档:
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.pdf
找到spring-boot-starter-thymeleaf 点击后面的pom,将依赖拷贝到项目的pom.xml中
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>
使用自动装配:
查找两个类:
1、XXXAutoConfigarution
2、XXXProperties
所以,我们要自动装配Thymeleaf,我们需要想找两个类ThymeleafAutoConfiguration和ThymeleafProperties类。
@ConfigurationProperties(prefix = "spring.thymeleaf")
public class 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";
...
}
通过 prefix+属性名来配置,可知prefix = "spring.thymeleaf".
由源码可知,thymeleaf的文件应该放在classpath:/templates/中后缀为html
实例:
在controller中添加请求响应:
@RequestMapping("welcomethymeleaf")
public String welcomethymeleaf(Map<String, Object> map) {
map.put("word", "hello thymeleaf!!!");
return "thymeleaf";
}
在templates中创建thymeleaf.html:
<body>
<p th:text="${word}">Welcome to thymeleafword!</p>
</body>
输出为:
hello thymeleaf!!!
解析:
<p th:text="${word}">Welcome to thymeleafword!</p> 先从${word}中取值,如果有,则直接显示${word}的值,如果没有则显示Welcome to thymeleafword!
所以th就是替换原有html的值。
如:
<p id="pid" class="pclass" th:text="${word}">Welcome to thymeleafword!</p>
<p th:id="${word}" th:class="${word}" th:text="${word}">Welcome to thymeleafword!</p>
查看最终输出到浏览器的源码为:
<p id="pid" class="pclass">hello thymeleaf!!!</p>
<p id="hello thymeleaf!!!" class="hello thymeleaf!!!">hello thymeleaf!!!</p>
th:each 的使用实例:
controller:
@RequestMapping("thymeleafeach")
public String thymeleafeach(Map<String, Object> map) {
ArrayList users=new ArrayList<User>();
users.add(new User("feifei","feifei","广东.深圳.龙华"));
users.add(new User("yoyo1","yoyo","湖南.长沙.天心"));
map.put("users", users);
return "thymeleaf-each";
}
html:
<body>
<table>
<th:block th:each="user : ${users}">
<tr>
<td th:text="${user.login}">...</td>
<td th:text="${user.name}">...</td>
</tr>
<tr>
<td colspan="2" th:text="${user.address}">...</td>
</tr>
</th:block>
</table>
</body>