Freemarker 教程
来源:互联网 发布:linux系统宕机日志 编辑:程序博客网 时间:2024/06/16 04:57
首先啰嗦一下:FreeMarker是一款模板引擎即一种基于模板和要改变的数据, 并用来生成输出文本(网页、HTML等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。说白了,他可以代替jsp用来实现我们的view展示层的一项技术。
这里我说一下采用freemarker生成静态页面!
下面开始我们的代码编写之路:
模拟真实开发场景,因为windows系统和Linux系统的文件夹组成不一样,而且在Linux环境下我们采用nginx进行反向代理和负载均衡,所以,生成出来的HTML文件的存放我们需要配置资源文件 freemarker.windows.properties和freemarker.linux.properties
freemarker.windows.properties
CHARCODE = UTF-8
#模板路径
TEMPLATE_FILE_PATH = /
#模板名称
TEMPLATE_FILE_NAME = template.ftl
#生成的文件后缀名
CREATE_SUFFIX_NAME = .html
#生成的文件存放路径(Windows下)
CREATE_FILE_PATH = E\:\\apache-tomcat-7.0.62\\webapps\\
freemarker.linux.properties
CHARCODE = UTF-8
#模板路径
TEMPLATE_FILE_PATH = /
#模板名称
TEMPLATE_FILE_NAME = template.ftl
#生成的文件后缀名
CREATE_SUFFIX_NAME = .html
CREATE_FILE_PATH = 你Linux下存放的静态资源的地址
创建一个工具类,来获取我们本地的系统到底是Windows还是Linux
ConfigUtil
package com.freemarker;import java.io.IOException;
import java.util.Properties;
public class ConfigUtil {
private static Properties DEC_PRO = null;
private static String DEC_OS_CONFIG=null;
private static void Dec_Choose_OS_Config(){
try {
DEC_PRO=new Properties();//
DEC_PRO = System.getProperties();//
DEC_OS_CONFIG = DEC_PRO.getProperty("os.name");//
System.out.println("DEC_OS_CONFIG:"+DEC_OS_CONFIG);// Unix ,linux, win
//
if(DEC_OS_CONFIG.indexOf("Win")>-1){
System.out.println("windows");
DEC_PRO.load(ConfigUtil.class.getResourceAsStream("freemarker.windows.properties"));
}else{
System.out.println("linux");
DEC_PRO.load(ConfigUtil.class.getResourceAsStream("freemarker.linux.properties"));
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static String Dec_Get_Os(){
if(DEC_OS_CONFIG==null)
Dec_Choose_OS_Config();
return DEC_OS_CONFIG;
}
public static String Dec_Get_Resource_By_Key(String key){
if (DEC_PRO == null)
Dec_Choose_OS_Config();
return DEC_PRO.getProperty(key);
}
public static void main(String[] args) {
ConfigUtil.Dec_Choose_OS_Config();
System.out.println(ConfigUtil.Dec_Get_Resource_By_Key("CHARCODE"));
}
}
下面编写一下freemarker的工具类
FreemarkerUtil
package com.freemarker;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Locale;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class FreemarkerUtil {
Template template = null;
//关于传入参数类型,可以根据自己业务需要,小伙伴们这是可以考虑重载
public void createTemplateHtml(Map<String, Object> map) throws IOException, TemplateException {
//创建freemarker实例
Configuration freeMarkerCfg = new Configuration();
//获取模板路径
freeMarkerCfg.setClassForTemplateLoading(this.getClass(),ConfigUtil.Dec_Get_Resource_By_Key("TEMPLATE_FILE_PATH"));
//设置编码格式
freeMarkerCfg.setEncoding(Locale.CHINA,"UTF-8");
//对象包装器作为插件放入 Configuration 中
freeMarkerCfg.setObjectWrapper(new DefaultObjectWrapper());
//获取模板名称
template = freeMarkerCfg.getTemplate(ConfigUtil.Dec_Get_Resource_By_Key("TEMPLATE_FILE_NAME"));
//通过系统判断自动为我们区分是Linux环境还是Windows环境,这里☞正式环境和测试环境
String reqFileName = ConfigUtil
.Dec_Get_Resource_By_Key("CREATE_FILE_PATH")
+ "这里放一个id" + ConfigUtil
.Dec_Get_Resource_By_Key("CREATE_SUFFIX_NAME");
OutputStreamWriter writer = new OutputStreamWriter(
new FileOutputStream(reqFileName),
"UTF-8");
template.process(map, writer);
writer.flush();
}
}
我有俩实体,用来做测试的,就不网上贴了
TestFreemarker
package com.freemarker.test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.freemarker.FreemarkerUtil;
import freemarker.template.TemplateException;
public class TestFreemarker {
public static void main(String[] args) {
Map<String, Object> map = new HashMap<String, Object>();
FreemarkerUtil freemarker = new FreemarkerUtil();
/**
* 比如说我的数据都是从数据库拿出来的
* 有集合有对象,什么都有,那我就用map咯
*/
List<User> list = new ArrayList<User>();
for (int i = 1; i < 5; i++) {
list.add(new User(i, "第"+i+"笨蛋", "女"));
}
map.put("list", list);
map.put("address", new Address("天安门", "中国"));
try {
freemarker.createTemplateHtml(map);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TemplateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
最后还差一个ftl模板
template.ftl
<html lang="zh-CN">
<head>
<title>第一个freemarker实例</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<!-- freemarker表达式可以参考 http://blog.csdn.net/pengpengpeng85/article/details/52070602 -->
<#setting number_format="0.00">
<body>
<!-- 这里来个list的遍历 -->
<#list list as user>
${user.id}=========${user.name}=========${user.sex}<br/>
</#list>
<p>**************************************突然来了一群星星</p>
<!-- 这里来个对象取值 -->
${address.addressName}------------------>${address.country}
</body>
</html>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
至此freemarker生成静态页面已经完成,具体小伙伴儿们可以根据公司自己的业务来决定怎么使用
上传一下我的目录
- FreeMarker教程
- FreeMarker教程
- FreeMarker教程
- FreeMarker教程
- Freemarker教程
- FreeMarker教程
- FreeMarker教程
- freemarker教程
- freemarker教程
- FreeMarker教程
- FreeMarker教程
- FreeMarker教程
- freemarker教程
- FreeMarker教程
- freemarker教程
- freemarker教程
- Freemarker 教程
- FreeMarker教程
- 手机拍摄的身份证怎么制作为复印件?
- jeecg 增删改查 后台代码
- 彻底精通JSON
- window.event.keyCode值整理
- 2017 Multi-University Training Contest
- Freemarker 教程
- LeetCode-- Wildcard Matching
- Arrays类——Arrays.asList()方法使用
- 【标准答案】sort命令多列排序/复合条件的方法
- I
- Mac 终端解压缩命令大全
- 程序员的小王子版本(什么是真正的程序员)
- TCP/IP协议头部结构与解析
- Java合并byte[]集合