Freemarker

Freemarker简介:
FreeMarker 是一款模板引擎: 即一种基于模板、用来生成输出文本(任何来自于 HTML
格式的文本用来自动生成源代码)的通用工具。它是为 Java 程序员提供的一个开发包(类库)
模板 + 数据模型 = 输出
FreeMarker 不是 Web 开发的应用程序框架。它是一个适用于 Web 应用程序框架中的组件,但是 FreeMarker 引擎本身并不知道 HTTP 协议或 Java Servlet 的存在。 它仅仅来生成文本内容。
Freemark就一个视图层技术,用来展现数据页面,类似的技术有themleaf、Velocity、facelets
添加jar包:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.26-incubating</version>
</dependency>

示例:

public class Test {
public static void main(String[] args) throws TemplateException, IOException {
// 1 创建配置
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File("G:\\UsianWork\\freemark\\freemarkqs\\template"));
cfg.setObjectWrapper(new DefaultObjectWrapper());
// 2 获取或创建模板
Template temp = cfg.getTemplate("test.ftl");
// 3 创建数据模型
Map root = new HashMap();
root.put("user", "Big Joe");
Map latest = new HashMap();
root.put("latestProduct", latest);
latest.put("url", "products/greenmouse.html");
latest.put("name", "green mouse");
// 4 将模板和数据模型合并 
Writer out = new OutputStreamWriter(System.out);
temp.process(root, out);
out.flush();
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${user}
${latestProduct.url}
${latestProduct.name}
</body>
</html>

模板

最简单的模板是普通 HTML 文件(或者是其他任何文本文件—FreeMarker 本身不属于
HTML)。 当客户端访问页面时, FreeMarker 要发送 HTML 代码至客户端浏览器端显示。 如果想要页面动起来,就要在 HTML 中放置能被 FreeMarker 所解析的特殊部分。
  • ${…}: FreeMarker 将会输出真实的值来替换花括号内的表达式,这样的表达式被称为
interpolations 插值
  • FTL tags 标签( FreeMarker 模板的语言标签): FTL 标签和 HTML 标签有一点相似,但是它们是 FreeMarker 的指令而且是不会直接输出出来的东西
  • Comments 注释: FreeMarker 的注释和 HTML 的注释相似,但是它用<#---->来分隔的
  • directives 指令: 就是所指的 FTL 标签。这些指令在 HTML 的标签(如<table></table>) 和 HTML 元素(如 table 元素) 中的关系是相同的。
指令
if 指令
list 指令
include 指令
指令嵌套
处理不存在的变量
  • 为空的变量一个默认值
  • 判断变量是否为空
数值和类型
数值
类型
支持的类型有:
 标量:
  • 字符串
  • 数字
  • 布尔值
  • 日期
 容器:
  • 哈希表
  • 序列(数组)
 子程序:
  • 方法和函数
  • 用户自定义指令
  • 其它/很少使用:
运算符号:
比较运算符号:
  • 测试两个值相等使用=(或者采用 Java 和 C 语言中的==,二者是完全等同的。)
  • 测试两个值不等使用!=。例子中假设 user 是”Big Joe”。
逻辑操作
逻辑或: ||逻辑与: &&逻辑非 !
内置函数:
使用内建函数的语法和访问哈希表子变量的语法很像, 除了使用?号来代替点,其他的都一样。 例如得到字符串的大写形式: user?upper_case。
 字符串使用的内建函数:
 html: 字符串中所有的特殊 HTML 字符都需要用实体引用来代替(比如<代
替&lt;)。
 cap_first:字符串的第一个字母变为大写形式
 lower_case:字符串的小写形式
 upper_case:字符串的大写形式
 trim:去掉字符串首尾的空格
 序列使用的内建函数:
 size:序列中元素的个数
 数字使用的内建函数:
 int:数字的整数部分(比如-1.9?int 就是-1)
Freemark与Springmvc整合:
添加jar包:
Springmvc配置文件:
<!-- Freemarker配置 -->
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/template/" />
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">0</prop>
<prop key="default_encoding">UTF-8</prop>
<prop key="number_format">0.##########</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="classic_compatible">true</prop>
<prop key="template_exception_handler">ignore</prop>
</props>
</property>
</bean>

<!--视图解释器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="suffix">
<value>.ftl</value>
</property>
<property name="contentType" value="text/html;charset=UTF-8"></property>
</bean>

工程目录结构:

生成静态页面
Controller
HtmlController类
/**
* 生成html到文件中
* @param model
* @return
*/
@RequestMapping("/genHtml")
public String index(Model model){

Configuration config = freeMarkerConfigurer.getConfiguration();
try(FileWriter fw = new FileWriter("D:\\goods.html")) {
Template template = config.getTemplate("goods.ftl");

Map<String, Object> root = new HashMap<>();
root.put("name", "Apple电脑");
root.put("price", 155.6);
template.process(root,fw );
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
}
User user = new User(1,"admin", new Date());
model.addAttribute("user", user);
return "main";
}

Ftl模板页面

goods.ftl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>

商品名:${name}<br/>
价格:${price}
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

excellentchen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值