JavaWeb进阶--FreeMarker

Freemarker中文参考手册:

 

http://freemarker.foofun.cn

 

模版引擎:数据+模版 前端处理模版,后端处理数据

主流模版引擎:
 

Freemarker:
 

JSP与Freemarker的区别:
Freemarker需要引用jar包


测试代码:
FreemarkerSample1.java:
 

package com.imooc.freemarker;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.imooc.freemarker.entity.Computer;

import freemarker.core.ParseException;
import freemarker.template.Configuration;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateNotFoundException;

public class FreemarkerSample1 {

	public static void main(String[] args) throws TemplateNotFoundException, MalformedTemplateNameException, ParseException, IOException, TemplateException {
		//1. 加载模板
		//创建核心配置对象
		Configuration config = new Configuration(Configuration.VERSION_2_3_28);
		//设置加载的目录,空字符串代表当前包
		config.setClassForTemplateLoading(FreemarkerSample1.class, "");
		//得到模板对象
		Template t = config.getTemplate("sample1.ftl");
		//2. 创建数据
		Map<String,Object> data = new HashMap<String,Object>();
		data.put("site", "新浪");
		data.put("url", "http://www.sina.com");
		data.put("date", new Date());
		data.put("number", 837183.883217);
		Map info = new HashMap();
		info.put("cpu", "i5");
		Computer c1 = new Computer("1234567" , "ThinkPad" , 1 , "李四" , new Date() , 12900f , info);
		data.put("computer", c1);
		//3. 产生输出
		t.process(data, new OutputStreamWriter(System.out));
	}
}

simple1.ftl:
 

<#-- Freemarker取值 -->
${site}
${url}
<#-- !默认值 -->
${author!"不存在的属性"}
<#-- ?string格式化输出 -->
${date?string("yyyy年MM月dd日 HH:mm:ss SSS")}
${number?string("0.00")}
<#if computer.sn == "1234567">
重要设备
</#if>
SN:${computer.sn}
型号:${computer.model}
<#if computer.state == 1>
状态:正在使用
<#elseif computer.state == 2>
状态:闲置
<#elseif computer.state == 3>
状态:已作废
</#if>

<#switch computer.state>
	<#case 1>
		状态:正在使用
		<#break>
	<#case 2>
		状态:闲置
		<#break>
	<#case 3>
		状态:已作废
		<#break>
	<#default>
		状态:无效状态
</#switch>
<#-- ??代表判断对象是否为空,true不为空,false为空 -->
<#if computer.user??>
用户:${computer.user}
</#if>
采购时间:${computer.dop?string("yyyy年MM月dd日")}
采购价格:${computer.price?string("0.00")}
配置信息:
--------------
CPU:${computer.info["cpu"]}
内存:${computer.info["memory"]!"无内存信息"}

输出结果:
 

新浪
http://www.sina.com
不存在的属性
2019年04月26日 16:56:51 458
837183.88
重要设备
SN:1234567
型号:ThinkPad
状态:正在使用

		状态:正在使用
用户:李四
采购时间:2019年04月26日
采购价格:12900.00
配置信息:
--------------
CPU:i5
内存:无内存信息

FTL取值:
 


 分支判断:
 


list迭代:
 

测试代码:
FreemarkerSample2.java:

package com.imooc.freemarker;
/**
 * 测试迭代
 */
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.imooc.freemarker.entity.Computer;

import freemarker.core.ParseException;
import freemarker.template.Configuration;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateNotFoundException;

public class FreemarkerSample2 {

	public static void main(String[] args) throws TemplateNotFoundException, MalformedTemplateNameException, ParseException, IOException, TemplateException {
		//1. 加载模板
		//创建核心配置对象
		Configuration config = new Configuration(Configuration.VERSION_2_3_28);
		//设置加载的目录
		config.setClassForTemplateLoading(FreemarkerSample2.class, "");
		//得到模板对象
		Template t = config.getTemplate("sample2.ftl");
		//2. 创建数据
		Map<String,Object> data = new HashMap<String,Object>();
		List<Computer> computers = new ArrayList();
		computers.add(new Computer("1234567" , "ThinkPad X1" , 2 , null , new Date() , 12999f , new HashMap() ));
		computers.add(new Computer("1234568" , "HP XXX" , 1 , "张三" , new Date() , 7500f , new HashMap() ));
		computers.add(new Computer("1234569" , "DELL XXX" , 3 , "李四" , new Date() , 8500f , new HashMap() ));
		computers.add(new Computer("1234570" , "ACER XXX" , 1 , "王五" , new Date() , 6300f , new HashMap() ));
		computers.add(new Computer("1234571" , "MSI XXX" , 1 , "赵六" , new Date() , 9300f , new HashMap() ));	
		data.put("computers",  computers);
		//LinkedHashMap可以保证数据按存放顺序进行提取
		Map computerMap = new LinkedHashMap();
		for(Computer c : computers) {
			computerMap.put(c.getSn(), c);
		}
		data.put("computer_map", computerMap);
		//3. 产生输出
		t.process(data, new OutputStreamWriter(System.out));
	}
}

simple2.ftl:
 

<#list computers as c>
序号:${c_index + 1} <#-- 迭代变量_index保存了循环的索引,从0开始 -->
SN:${c.sn}
型号:${c.model}
<#switch c.state>
<#case 1>
状态:使用中
<#break>
<#case 2>
状态:闲置
<#break>
<#case 3>
状态:已作废
<#break>
</#switch>
<#if c.user??>
用户:${c.user}
</#if>
采购日期:${c.dop?string("yyyy-MM-dd")}
采购价格:${c.price?string("0.00")}
-------------------------------------------
</#list>

==========================================
<#list computer_map?keys as k >
${k}-${computer_map[k].model}
${computer_map[k].price?string("0.00")}

</#list>

输出结果:

序号:1 
SN:1234567
型号:ThinkPad X1
状态:闲置
采购日期:2019-04-26
采购价格:12999.00
-------------------------------------------
序号:2 
SN:1234568
型号:HP XXX
状态:使用中
用户:张三
采购日期:2019-04-26
采购价格:7500.00
-------------------------------------------
序号:3 
SN:1234569
型号:DELL XXX
状态:已作废
用户:李四
采购日期:2019-04-26
采购价格:8500.00
-------------------------------------------
序号:4 
SN:1234570
型号:ACER XXX
状态:使用中
用户:王五
采购日期:2019-04-26
采购价格:6300.00
-------------------------------------------
序号:5 
SN:1234571
型号:MSI XXX
状态:使用中
用户:赵六
采购日期:2019-04-26
采购价格:9300.00
-------------------------------------------

==========================================
1234567-ThinkPad X1
12999.00

1234568-HP XXX
7500.00

1234569-DELL XXX
8500.00

1234570-ACER XXX
6300.00

1234571-MSI XXX
9300.00

Freemarker内置函数:

测试代码:
FreemarkerSample3.java:

package com.imooc.freemarker;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.imooc.freemarker.entity.Computer;

import freemarker.core.ParseException;
import freemarker.template.Configuration;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateNotFoundException;

public class FreemarkerSample3 {

	public static void main(String[] args) throws TemplateNotFoundException, MalformedTemplateNameException, ParseException, IOException, TemplateException {
		//1. 加载模板
		//创建核心配置对象
		Configuration config = new Configuration(Configuration.VERSION_2_3_28);
		//设置加载的目录
		config.setClassForTemplateLoading(FreemarkerSample3.class, "");
		//得到模板对象
		Template t = config.getTemplate("sample3.ftl");
		//2. 创建数据
		Map<String,Object> data = new HashMap<String,Object>();
		data.put("name", "jackson");
		data.put("brand", "bmw");
		data.put("words", "first blood");
		data.put("n", 37981.83);
		data.put("date", new Date());
		List<Computer> computers = new ArrayList();
		computers.add(new Computer("1234567" , "ThinkPad X1" , 2 , null , new Date() , 12999f , new HashMap() ));
		computers.add(new Computer("1234568" , "HP XXX" , 1 , "张三" , new Date() , 7500f , new HashMap() ));
		computers.add(new Computer("1234569" , "DELL XXX" , 3 , "李四" , new Date() , 8500f , new HashMap() ));
		computers.add(new Computer("1234570" , "ACER XXX" , 1 , "王五" , new Date() , 6300f , new HashMap() ));
		computers.add(new Computer("1234571" , "MSI XXX" , 1 , "赵六" , new Date() , 9300f , new HashMap() ));	
		data.put("computers", computers);
		//3. 产生输出
		t.process(data, new OutputStreamWriter(System.out));
	}
}

sample3.ftl:

${name?cap_first}
${brand?upper_case}
${brand?length}
${words?replace("blood" , "*****")}
${words?index_of("blood")}
<#-- 利用?string实现三目运算符的操作 -->
<#-- 判断是否是否包含,利用三目运算 -->
${(words?index_of("blood") != -1)?string("包含敏感词汇","不包含敏感词汇")}

${n?round}
${n?floor}
${n?ceiling}

公司共有${computers?size}台电脑
第一台:${computers?first.model}
最后一台:${computers?last.model}

<#list computers?sort_by("price")?reverse as c>
	${c.sn}-${c.price}
</#list>

输出结果:

Jackson
BMW
3
first *****
6
包含敏感词汇

37,982
37,981
37,982

公司共有5台电脑
第一台:ThinkPad X1
最后一台:MSI XXX

	1234567-12,999
	1234571-9,300
	1234569-8,500
	1234568-7,500
	1234570-6,300

案例:Freemarker与Servlet整合

github地址:

https://github.com/ChuanshuaiLi/Freemarker.git

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值