spring boot使用thymeleaf模板的方法详解
前言
thymeleaf 是一个跟 velocity、freemarker 类似的模板引擎,它可以完全替代 jsp 。相较与其他的模板引擎,它有如下三个极吸引人的特点:
1.thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
2.thymeleaf 开箱即用的特性。它提供标准和spring标准两种方言,可以直接套用模板实现jstl、 ognl表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
3.thymeleaf 提供spring标准方言和一个与 springmvc 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
下面这篇文章将给
整体步骤:
(1) 在pom.xml中引入thymeleaf;
(2) 如何关闭thymeleaf缓存
(3) 编写模板文件.html
spring boot默认就是使用thymeleaf模板引擎的,所以只需要在pom.xml加入依赖即可:
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-thymeleaf</artifactid> </dependency>
thymeleaf缓存在开发过程中,肯定是不行的,那么就要在开发的时候把缓存关闭,只需要在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
编写模板文件src/main/resouces/templates/hellohtml.html
<!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.v.2</h1> <p th:text="${hello}"></p> </body> </html>
编写访问路径(com.kfit.test.web.templatecontroller):
package com.kfit.test.web; import java.util.map; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; /** * 模板测试. * @author administrator * */ @controller publicclass templatecontroller { /** * 返回html模板. */ @requestmapping("/hellohtml") public string hellohtml(map<string,object> map){ map.put("hello","from templatecontroller.hellohtml"); return"/hellohtml"; } }
启动应用,输入地址:http://127.0.0.1:8080/hellohtml 会输出:
hello.v.2
from templatecontroller.hellohtml
使用freemarker
使用freemarker也很简单,
在pom.xml加入freemarker的依赖:
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-freemarker</artifactid> </dependency>
剩下的编码部分都是一样的,说下application.properties文件:
######################################################## ###freemarker (freemarkerautoconfiguration) ######################################################## spring.freemarker.allow-request-override=false spring.freemarker.cache=true spring.freemarker.check-template-location=true spring.freemarker.charset=utf-8 spring.freemarker.content-type=text/html spring.freemarker.expose-request-attributes=false spring.freemarker.expose-session-attributes=false spring.freemarker.expose-spring-macro-helpers=false #spring.freemarker.prefix= #spring.freemarker.request-context-attribute= #spring.freemarker.settings.*= #spring.freemarker.suffix=.ftl #spring.freemarker.template-loader-path=classpath:/templates/#comma-separatedlist #spring.freemarker.view-names= #whitelistofviewnamesthatcanberesolved
com.kfit.test.web.templatecontroller:
/** * 返回html模板. */ @requestmapping("/helloftl") public string helloftl(map<string,object> map){ map.put("hello","from templatecontroller.helloftl"); return"/helloftl"; }
访问地址:http://127.0.0.1:8080/helloftl
hello.v.2
from templatecontroller.helloftl
thymeleaf和freemarker是可以共存的。
------------------------------------------------------------------------------------------------------------------------------------------------
本文记录一下几点:
一、资源文件的约定目录结构
二、maven配置
三、开发时修改thymeleaf模板自动重新加载配置
四、thymeleaf常用基础知识点
一、资源文件的约定目录结构
maven的资源文件目录:/src/java/resources
spring-boot项目静态文件目录:/src/java/resources/static
spring-boot项目模板文件目录:/src/java/resources/templates
spring-boot静态首页的支持,即index.html放在以下目录结构会直接映射到应用的根目录下:
classpath:/meta-inf/resources/index.html classpath:/resources/index.html classpath:/static/index.html calsspath:/public/index.html
由于使用thymeleaf的html5模板,所以我将index.html模板文件直接放到了/src/java/resources/templates目录下。然而这个目录并不是首页文件的默认目录,所以我们需要手动将应用根路径映射到/src/java/resources/templates/index.html下。这个在spring-mvc的controller下映射一下就可以了。
@requestmapping("/") public string index(){ return "index"; }
在spring-boot下,默认约定了controller试图跳转中thymeleaf模板文件的的前缀prefix是”classpath:/templates/”,后缀suffix是”.html”
这个在application.properties配置文件中是可以修改的。
如下配置可以修改试图跳转的前缀和后缀
spring.thymeleaf.prefix: /templates/ spring.thymeleaf.suffix: .html
更过有关thymeleaf中的默认这是可以查看org.springframework.boot.autoconfigure.thymeleaf.thymeleafproperties
这个类的属性
二、maven配置
在pom.xml中加入如下依赖
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-thymeleaf</artifactid> </dependency>
原来关于spring-boot-starter-web等的依赖就可以去掉了,因为spring-boot-starter-thymeleaf是包含这些依赖的。而关于jsp的依赖也可以去掉了,因为我们已经完全抛弃jsp了。
三、开发时修改thymeleaf模板自动重新加载配置
spring-boot使用thymeleaf时默认是有缓存的,即你把一个页面代码改了不会刷新页面的效果,你必须重新运行spring-boot的main()方法才能看到页面更改的效果。我们可以把thymeleaf的缓存关掉,用于支持页面修改后重新发布到spring-boot内嵌的tomcat中去。在application.properties配置文件中加入以下配置。
# allow thymeleaf templates to be reloaded at dev time spring.thymeleaf.cache: false server.tomcat.access_log_enabled: true server.tomcat.basedir: target/tomcat
四、thymeleaf常用基础知识点
1、在html页面中引入thymeleaf命名空间,即<html xmlns:th=http://www.thymeleaf.org></html>
,此时在html模板文件中动态的属性使用th:命名空间修饰
2、引用静态资源文件,比如css和js文件,语法格式为“@{}”,如@{/js/blog/blog.js}会引入/static目录下的/js/blog/blog.js文件
3、访问spring-mvc中model的属性,语法格式为“${}”,如${user.id}
可以获取model里的user对象的id属性
4、循环,在html的标签中,加入th:each=“value:${list}”
形式的属性,如<span th:each=”user:${users}”></span>
可以迭代users的数据
5、判断,在html标签中,加入th:if=”表达式”可以根据条件显示html元素
<span th:if="${not #lists.isempty(blog.publishtime)}"> <span id="publishtime" th:text="${#dates.format(blog.publishtime, 'yyyy-mm-dd hh:mm:ss')}"></span> </span>
以上代码表示若blog.publishtime
时间不为空,则显示时间
6、时间的格式化,
${#dates.format(blog.publishtime,'yyyy-mm-dd hh:mm:ss')}
表示将时间格式化为”yyyy-mm-dd hh:mm:ss”格式化写法与java格式化date的写法是一致的。
7、字符串拼接,有两种形式
比如拼接这样一个url:/blog/delete/{blogid}
第一种:th:href="'/blog/delete/' + ${blog.id }" rel="external nofollow"
第二种:th:href="${'/blog/delete/' + blog.id }" rel="external nofollow"
总结
以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
下一篇: PS制作带水墨字画的竹简教程
推荐阅读
-
spring boot使用thymeleaf模板的方法详解
-
详解Spring Boot中MyBatis的使用方法
-
详解spring cloud使用Hystrix实现单个方法的fallback
-
使用Docker部署 spring-boot maven应用的方法
-
spring boot Logging的配置以及使用详解
-
Spring Boot使用AOP防止重复提交的方法示例
-
在Spring Boot中使用swagger-bootstrap-ui的方法
-
详解Spring mvc ant path的使用方法
-
详解Spring Boot配置使用Logback进行日志记录的实战
-
Spring Boot使用yml格式进行配置的方法