spring-boot集成thymeleaf。

时间:2023-03-10 03:40:33
spring-boot集成thymeleaf。

thymeleaf是前台页面展示,原来一直是jsp,jsp中包含很多服务器端的逻辑,逐渐淘汰。同样功能的还有freemarker。孰好孰坏不予评价,只做简单实现。

1、基本思路

  (1)pom.xml中配置依赖。

  (2)写页面。

  (3)Controller的改动。

2、实现

  (1)需要在pom.xml中添加代码如下:

    

<!-- thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

  pom.xml代码如下

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sun</groupId>
<artifactId>spring-boot-test</artifactId>
<version>0.0.1-SNAPSHOT</version> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
</parent> <dependencies>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!-- thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency> <!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency> <!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency> <!-- 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency> <!-- redis cache related.....start -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

  (2)页面写个得到全体User的展现页面吧。

  

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title>Hello World!</title>
</head>
<body>
<h1 th:inline="text">Hello World!</h1> <p id="userList" th:text="${userList}"></p>
<th:block th:each="user,index:${userList}">
<span th:text="${user.id}" ></span>
<span th:text="${user.username}" ></span>
<span th:text="${user.password}" ></span>
<br/>
</th:block>
</body>
</html>

  (3)修改Controller。修改代码如下:

@RequestMapping("/all")
public String findAll(Map<String,Object> map){
List<User> userList = userMapper.selectAll();
map.put("hello","PPBOY");
map.put("userList",userList);
return "/test";
}

Controller源码如下,记得把@RestController换成@Controller:

package com.sun.controller;

import java.util.List;
import java.util.Map; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import com.sun.beans.RedisCacheUtil;
import com.sun.dao.UserMapper;
import com.sun.model.User; @Controller
@RequestMapping("/test")
public class TestController { @Resource
private UserMapper userMapper; @RequestMapping("/hello")
public String hello(){
return "Hello world!";
} @RequestMapping("/all")
public String findAll(Map<String,Object> map){
List<User> userList = userMapper.selectAll();
map.put("hello","PPBOY");
map.put("userList",userList);
return "/test";
} @Autowired
private RedisCacheUtil<User> redisCache; @RequestMapping("/testGetCache")
public String testGetCache()
{ System.out.println("------------user");
Map<Integer,User> userMap = redisCache.getCacheIntegerMap("userMap");
for(int key : userMap.keySet())
{
System.out.println("key = " + key + ",value=" + userMap.get(key));
}
return "/test";
}
}

3、总结

  (1)模板引擎最终还是要和Controller做联系的,所以两者的关联是重点。

    需要在controller的对应方法中return一个字符串是文件路径,比如return "/test"。

  (2)页面访问地址需要的@RequestMapping("/") 这个写到Controller的方法中,访问这个方法,就是http://localhost:8080/就可以了

  (3)为什么我的项目代码在myeclipse中会给个 Initializing Spring Project '***'". java.lang.IllegalArgumentException这样的提示,但是启动项目没问题啊??妈的,我怀疑我myeclipse有问题。

  (4)模板引擎要放到resources下的templates文件夹下。

  spring-boot集成thymeleaf。

  (5)最后还要记得在application.properties中添加代码关闭模板引擎的缓存。

########################################################
###THYMELEAF (ThymeleafAutoConfiguration)
########################################################
#spring.thymeleaf.prefix=classpath:/templates/
#spring.thymeleaf.suffix=.html
#spring.thymeleaf.mode=HTML5
#spring.thymeleaf.encoding=UTF-8
# ;charset=<encoding> is added
#spring.thymeleaf.content-type=text/html
# set to false for hot refresh
spring.thymeleaf.cache=false

源码已上传https://github.com/sunfengjiajia/spring-boot-test