关于在spring boot中使用默认的 thymeleaf模板_jslzcydd的博客-程序员宅基地

技术标签: spring  java基础学习  

关于在spring boot中使用默认的 thymeleaf模板
整体步骤:
(1) 在pom.xml中引入thymeleaf;
(2) 如何关闭thymeleaf缓存
(3) 编写模板文件.html
Spring Boot默认就是使用thymeleaf模板引擎的,所以只需要在pom.xml加入依赖即可:
[html] view plain copy

org.springframework.boot

     <artifactId>spring-boot-starter-thymeleaf</artifactId>  


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
[html] view plain copy

########################################################  
###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放在以下目录结构会直接映射到应用的根目录下:
[html] view plain copy
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下映射一下就可以了。
[html] view plain copy
@RequestMapping(“/”)
public String index(){
return “index”;
}
在spring-boot下,默认约定了Controller试图跳转中thymeleaf模板文件的的前缀prefix是”classpath:/templates/”,后缀suffix是”.html”
这个在application.properties配置文件中是可以修改的。
如下配置可以修改试图跳转的前缀和后缀
[html] view plain copy
spring.thymeleaf.prefix: /templates/
spring.thymeleaf.suffix: .html

更过有关thymeleaf中的默认这是可以查看org.springframework.boot.autoconfigure.thymeleaf.ThymeleafProperties这个类的属性
二、Maven配置
在pom.xml中加入如下依赖
[html] view plain copy

org.springframework.boot
spring-boot-starter-thymeleaf

原来关于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命名空间,即http://www.thymeleaf.org>,此时在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<spanth:each=user: {users}”>可以迭代users的数据

5、判断,在html标签中,加入th:if=”表达式”可以根据条件显示html元素



以上代码表示若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.idth:href= {‘/blog/delete/’ + blog.id }”

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jsl18328504657/article/details/77968063

智能推荐

Unity3D Terrain_aa20274270的博客-程序员宅基地

1. 如何获得Terrain 的 Blend Texture,(splatAlpha Texture) TerrainData terrainData = (TerrainData)selObjs[i];Texture2D[] splatAlphaTex = terrainData.alphamapTextures;        for (int index = 0; ind

android compile tasks中dex过程源码情景分析_natureXin的博客-程序员宅基地

0x00 前言MultiDex中出现的main dex capacity exceeded解决之道中我们知道main dex的class可以由maindexlist.txt指定,Android MultiDex机制杂谈中我们分析了google MultiDex机制中Secondary dex的install过程,那么,我们的app在android gradle build过程中,.

360儿童手表双十一最新战报:30分钟销量破7万台!_weixin_34418883的博客-程序员宅基地

在刚刚开始的京东双十一全球狂欢节,360传来了战报,仅10分钟,360儿童手表全网销量突破3万台,就在笔者编辑新闻期间,最新数据显示,360儿童手表前30分钟销量,已经突破7万台。图1:360儿童手表获全网销量冠军360儿童手表自发布以来,凭借其强大的功能以及出色的体验,受到了消费者的广泛好评。360儿童手表既满足家长时刻关注孩子安全动态的需求,又完成作为孩子贴心伙伴的陪伴功能,成为双十一购物热潮...

Hadoop集群群起脚本(zookeeper、Hadoop、HBase)_文艺小卿年的博客-程序员宅基地

学习HBASE的时候,因为需要启动zookeeper和Hadoop,需要很多命令才能全部启动,关闭时也比较麻烦。所以就自己写了群起脚本和关闭脚本(/root/bin目录下,也可根据自己实际情况选择目录),记录一下。群起脚本startcluster.sh#!/bin/bashfor i in master slave1 slave2do echo &quot;=====$i====...

李代数(第2版)_iteye_11916的博客-程序员宅基地

《李代数(第2版)》基本信息作者: 万哲先丛书名: 现代数学基础系列出版社:高等教育出版社ISBN:9787040372663上架时间:2013-7-3出版日期:2013 年6月开本:16开页码:278版次:2-1所属分类:数学 &amp;gt; 代数,数论及组合理论 &amp;gt; 综合更多关于 》》》《李代数(第2版) 》内容简介数学书籍  ...

力扣刷题——零钱兑换1+2(动态规划)_丢丢diu丢的博客-程序员宅基地

0.上一个动规专题力扣4—动态规划1.零钱兑换(动态规划)322. 零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。1.解题思路(动态规划)1.建立动态数组 int[] dp = new int[amount+1],解释:0元~amount元共amount+1个状态;2.dp[i]表示,凑够i元需要的最少的硬币数;3.假设co

随便推点

java代码挡板接球_js视频教程(对象)第5天09_挡板球小游戏上集.mp4_知惠酱的博客-程序员宅基地

本js视频教程详细课程目录如下:├─1.JS进阶视频教程-特效 3天课程│ ├─第1天│ │ JavaScript特效视频教学第1天01_早上考试向上滚动的间歇动画.mp4│ │ JavaScript特效视频教学第1天02_拼图轮播的原理.mp4│ │ JavaScript特效视频教学第1天03_拼图轮播的实现.mp4│ │ JavaScript特...

HashMap的储存过程_milestoneO的博客-程序员宅基地

HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入...

阿迪达斯2020年第三季度实现强劲复苏,收入59.64亿欧元_美通社的博客-程序员宅基地

2020年第三季度业绩摘要:-第三季度,公司收入及利润水平与去年同期相近-剔除汇率因素,公司收入下降3%。这是由于公司着力于恢复健康的库存水平、销售盈利,以及对经销商供货的严格管理-电商...

C++ 中string.find() 函数的用法总结(转载)_lineCode的博客-程序员宅基地

#include #include using namespace std;void main(){[cpp] view plaincopy ////find函数返回类型 size_type  string s("1a2b3c4d5e6f7g8h9i1a2b3c4d5e6f7g8ha9i");  string flag

oracle11g 隐藏参数_ORACLE隐藏参数查看及修改的方法_weixin_39992831的博客-程序员宅基地

查看隐藏参数SELECT x.ksppinm name,y.ksppstvl value,y.ksppstdf isdefault,decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismod,decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE') isadjFROMsys.x$ks...

推荐文章

热门文章

相关标签