Freemarker的简介与入门

1. 什么是Freemarker
  • FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
  • 目前企业中:主要用Freemarker做静态页面或是页面展示

一、Freemarker的入门

1.创建Maven project工程,jar包类型

在这里插入图片描述

2.添加依赖
<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>freemarker.demo</groupId>
<artifactId>freemarkerDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>
	<dependency>
		<groupId>org.freemarker</groupId>
		<artifactId>freemarker</artifactId>
		<version>2.3.23</version>
	</dependency>
</dependencies>
</project>
3.创建模版文件
<html>
<head>
<title>demo</title>
<meta charset="utf-8">
</head>
<body>

<#--freemarker的注解部分-->
<!--html的注释-->

${name},欢迎你。${message}

</body>
</html>
4.创建StartDemo.java生成模版文件
package test.demo;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;

public class StartDemo {

public static void main(String[] args) throws Exception {

	//创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对应的版本号
	Configuration configuration=new Configuration(Configuration.getVersion());
	
	//设置模版文件所在的绝对路径
	configuration.setDirectoryForTemplateLoading(new File("/Users/xiayubao/eclipse-workspace/freemarkerDemo/src/main/resources/"));
	
	//设置模版文件使用的字符集,一般使用utf-8
	configuration.setDefaultEncoding("utf-8");
	
	//加载模版,创建一个模版对象
	Template template=configuration.getTemplate("demo.ftl");
	
	//创建一个模版使用的数据集,可以是pojo也可以是map,一般是map
	Map map=new HashMap();
	
	//向数据集中添加数据
	map.put("name","小可爱");
	map.put("message","喜欢你哦");
	
	//创建一个输出流对象,一般创建一FileWriter对象,指定生成的文件名。
	Writer out=new FileWriter("/Users/xiayubao/Desktop/index.html");
	
	//调用模板对象的process方法输出文件。
	template.process(map, out);
	
	//关闭流
	out.close();
}
}
5.测试结果

在这里插入图片描述

二、Freemarker的指令

1.FreeMarker的模板文件
  • 1.文本,直接输出的部分
  • 2.注释,即<#–…-->格式不会输出
  • 3.插值(Interpolation):即${…}或者#{…}格式的部分,将使用数据模型中的部分替代输出
  • 4.FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出。
<html> 
<body>  
<#-- 注释部分 -->
<br>  
<#-- 下面使用插值 -->  
<h1>Welcome ${user} !</h1>
<p>We have these animals:
<u1>
<#-- 使用FTL指令 -->  
<#list animals as being>
<li>${being.name} </li>
<#list>
<u1>
</body>
</html>
2.include指令

可以引入html,也可以是另一个模版

<#include "include.html"/>  
<#include "/common/copyright.ftl" encoding=”GBK”>
3.if指令

在freemarker的模版中,=和==的效果是一样的。

<#if success=true>
  输出什么?
<#else>
  也输出一些什么?
</#if>
4.list指令
  • 主要是进行迭代服务器端传递过来的List集合,name是list循环的时候取的一个循环变量.
  • item_index:当前变量的索引值
  • item_has_next:是否存在下一个对象
  • break:跳出迭代
<#list nameList as names>    
  ${names}   
</#list>
5.import指令
  • 类似于java里的import,它导入文件,然后就可以在当前文件里使用被导入文件里的宏组件。
<#import path as hash>
6.assign指令
  • assign指令用于为该模板页面创建或替换一个顶层变量。
  • 就是用于在页面上定义变量
<#assign name=value>
 or 
<#assign name1=value1 name2=value2 ... nameN=valueN> 
姓名是:${value}

<#assign same as above... in namespacehash> 
 
<#assign name> 
  capture this 
</#assign> 

<#assign name in namespacehash> 
  capture this 
</#assign>
代码
package test.demo;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.sql.Date;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;

public class StartDemo {
	
	public static void main(String[] args) throws Exception {

		//创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对应的版本号
		Configuration configuration=new Configuration(Configuration.getVersion());
		
		//设置模版文件所在的绝对路径
		configuration.setDirectoryForTemplateLoading(new File("/Users/xiayubao/eclipse-workspace/freemarkerDemo/src/main/resources/"));
		
		//设置模版文件使用的字符集,一般使用utf-8
		configuration.setDefaultEncoding("utf-8");
		
		//加载模版,创建一个模版对象
		Template template=configuration.getTemplate("demo.ftl");
		
		//创建一个模版使用的数据集,可以是pojo也可以是map,一般是map
		Map map=new HashMap();
		
		//向数据集中添加数据
		map.put("name","小可爱");
		map.put("message","喜欢你哦");
		
		map.put("success", true);
		
		
		List goodsList=new ArrayList();
		Map goods1=new HashMap();
		goods1.put("name", "苹果");
		goods1.put("price", 5.8);
		Map goods2=new HashMap();
		goods2.put("name", "香蕉");
		goods2.put("price", 2.5);
		Map goods3=new HashMap();
		goods3.put("name", "橘子");
		goods3.put("price", 3.2);
		goodsList.add(goods1);
		goodsList.add(goods2);
		goodsList.add(goods3);
		map.put("goodsList", goodsList);

		map.put("point", 102920122);
		
		//创建一个输出流对象,一般创建一FileWriter对象,指定生成的文件名。
		Writer out=new FileWriter("/Users/xiayubao/Desktop/index.html");
		
		//调用模板对象的process方法输出文件。
		template.process(map, out);
		
		//关闭流
		out.close();
	}
}

<html>
<head>
<title>demo</title>
<meta charset="utf-8">
</head>
<body>

<#--freemarker的注解部分-->
<!--html的注释-->

${name},欢迎你。${message}

<#assign linkman="周先生">
联系人:${linkman}

<#assign info={"mobile":"13301231212",'address':'北京市昌平区王府街'} >
电话:${info.mobile}  地址:${info.address}

<#if success=true>
  你已通过实名认证
<#else>  
  你未通过实名认证
</#if>


<#list goodsList as goods>
  ${goods_index+1} 商品名称: ${goods.name} 价格:${goods.price}<br>
</#list>
共  ${goodsList?size}  条记录

<#include "head.ftl">


<#assign text="{'bank':'工商银行','account':'10101920201920212'}" />
<#assign data=text?eval />
开户行:${data.bank}  账号:${data.account}



累计积分:${point}
累计积分:${point?c}

<#if aaa??>
  aaa变量存在
<#else>
  aaa变量不存在
</#if>

 ${aaa!'-'}

</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值