目录
1. freemarker介绍
2. freemarker使用步骤
2.1 在pom.xml引入freeMarker的依赖包
2.2 在springboot中添加freemarker配置
2.3 编写模板文件*.ftl(当做jsp使用即可)
编辑
2.4 访问控制器后进行页面跳转
3. freemarker常用语法
3.1 取值
3.2 条件
3.3 循环
3.4 include
3.5 局部变量(assign)/全局变量(global)
4. yml的介绍
"freemarker"和"jsp"的区别和联系有:
一、jsp
优点:
1、功能强大,可以写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el)
4、官方标准,用户群广,丰富的第三方jsp标签库
5、性能良好。jsp编译成class文件执行,有很好的性能表现
缺点:
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。
二、freemarker
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多
选择freemarker的原因:
1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
2、宏定义比jsp tag方便
3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便
4、支持jsp标签
5、可以实现严格的mvc分离
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据
注1:springboot中支持的两种模板技术
thymeleaf(默认)/freemarker
org.springframework.boot spring-boot-starter-freemarker
spring: freemarker:#指定HttpServletRequest的属性是否可以覆盖controller的model的同名项allow-request-override: false#req访问requestrequest-context-attribute: req#后缀名freemarker默认后缀为.ftl,当然你也可以改成自己习惯的.htmlsuffix: .ftl#设置响应的内容类型content-type: text/html;charset=utf-8#是否允许mvc使用freemarkerenabled: true#是否开启template cachingcache: false#设定模板的加载路径,多个以逗号分隔,默认: [“classpath:/templates/”]template-loader-path: classpath:/templates/#设定Template的编码charset: UTF-8# 设置静态文件路径,js,css等mvc:static-path-pattern: /static/**

Hello ${userName},Welcome to Freemarker!!!
注1:freemarker如果取值为空,是会报错, 所以要对可能为空的值要进行处理, 方案有两种:
1. 提供默认值
${name!}或${name!'未知'} !后面就是默认值
2. 对null值先进行判断
1)exists用在逻辑判断;
<#if name?exists>
${name}
#if>
2)if_exists用来打印东西
${name?if_exists}
3)??是判断对象是否为空
<#if name??>
${name}
#if>代码案例:
1.exists用在逻辑判断
<#if userName?exists>${userName} <#else>不存在 #if>2.if_exists用来打印东西
${userName?if_exists}3.??是判断对象是否为空
<#if userName??>${userName} #if>
<#if sex=="女">今天是个好日子
<#elseif sex=="男">男
<#else>保密
#if>
<#list friends as item>
姓名:${item.name} , 年龄${item.age}
#list>
<#include "/header.ftl" >
<#assign ctx>
${springMacroRequestContext.contextPath}
#assign>
<#global ctx>
...
#global>
注:
1)${springMacroRequestContext.contextPath}:SpringBoot中获取项目名
2) 不推荐使用全局变量。即便它们属于不同的命名空间, 全局变量也被所有模板共享,因为它们是被 import进来的。
YAML(Yet Another Markup Language)一种基于Unicode容易阅读,容易和脚本语言交互的,用来表达资料序列的编程语言
基本语法
1 不同“等级” 用冒号隔开
2 次等级的前面是空格,不能使用制表符(tab)
3 冒号之后如果有值,那么冒号和值之间至少有一个空格,不能紧贴着

下面这个是我的yml文件的配置:
server:port: 8080servlet:context-path: /springboot02
spring:datasource:#1.JDBCtype: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/t277?useUnicode=true&characterEncoding=utf8&useSSL=falseusername: rootpassword: 1234freemarker:#指定HttpServletRequest的属性是否可以覆盖controller的model的同名项allow-request-override: false#req访问requestrequest-context-attribute: req#后缀名freemarker默认后缀为.ftl,当然你也可以改成自己习惯的.htmlsuffix: .ftl#设置响应的内容类型content-type: text/html;charset=utf-8#是否允许mvc使用freemarkerenabled: true#是否开启template cachingcache: false#设定模板的加载路径,多个以逗号分隔,默认: [“classpath:/templates/”]template-loader-path: classpath:/templates/#设定Template的编码charset: UTF-8# 设置静态文件路径,js,css等mvc:static-path-pattern: /static/**
logging:level:com.zking.spbootmp. mapper : debug
"freemarker"和"jsp"的区别和联系有:
1、功能强大,可以写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el)
4、官方标准,用户群广,丰富的第三方jsp标签库
5、性能良好。jsp编译成class文件执行,有很好的性能表现
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言
1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
2、宏定义比jsp tag方便
3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便
4、支持jsp标签
5、可以实现严格的mvc分离
