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文件夹下。
(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