freemaker 使用思路
来源:互联网 发布:nginx阿里云绑定域名 编辑:程序博客网 时间:2024/06/07 05:26
1 引入freemaker包
注意:选取最新jar包,否则可能会报错
2 创建 Configuration对象: tempConfiguration = new Configuration();
Configuration 对象主要是用来获取模板(Template)对象(或者说文件)
3 设置Configuration信息,如模板存放位置,字符编码等;
tempConfiguration.setClassForTemplateLoading(this.getClass(), "/");
tempConfiguration.setDefaultEncoding("utf-8");
常用有两种方式来设置模板存放位置:
setClassForTemplateLoading(this.getClass(), "/"); //JAVA源码中相对路径,这里是classpath
setServletContextForTemplateLoading.getServletContext(),"templates")//获取web工程中相对路径,这里获取的是WebContent下templates文件夹路径
注意:第一种设置方式适用于自动生成代码,多数用于在main函数中运行时设置模板路径;第二种适用于servlet或者web开发中,用于动态生成页面
4 获取Template对象:template= tempConfiguration.getTemplate("wzq.ftl")
注意:classpath路径下应该先有个wzq.ftl文件,否则找不到文件
5 设定需要向模板中添加的数据,这里使用map存放数据
Map root = new HashMap();
User user = new User();
user.setName("zhansan");
root.put("user",user);
6 根据模板生成数据:数据可以为文件,也可以为stream
下面贴出代码,代码中有部分来自网上,关键部分按自己的理解经过修改,共两种方式,一种是基于main方法,另一种是servlet,代码并不完整,希望为用过java或者servlet的朋友一个参考
一个JAVA文件对应一个FTL模板
基于main方法使用
JAVA部分
package example;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.StringWriter;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 FrermarkerXml {Template testfile;Map root;private void initData() { root = new HashMap(); User user = new User(); user.setName("root"); user.setPwd("root"); List<Address> addresses = new ArrayList<Address>(); for (int i = 0; i < 2; i++) { Address address = new Address(); address.setName("address_"+i); addresses.add(address); } Map<String, Address> keyadds = new HashMap<String, Address>(); for (int i = 0; i < 2; i++) { Address address = new Address(); address.setName("mapaddress_"+i); keyadds.put("keyadd_"+i, address); } user.setAdds(addresses); user.setKeyadds(keyadds); root.put("user", user); }private void init(){ try { Configuration tempConfiguration = new Configuration(); tempConfiguration.setClassicCompatible(true); tempConfiguration.setClassForTemplateLoading(this.getClass(), "/"); tempConfiguration.setDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); tempConfiguration.setNumberFormat(""); tempConfiguration.setDefaultEncoding("utf-8"); testfile = tempConfiguration.getTemplate("wzq_main.ftl"); } catch (IOException ex) { ex.printStackTrace(); } }public String toString(){ StringWriter sw = new StringWriter(); File file = new File("C:\\Apps\\wzq.xml"); if(!file.exists()){ try {file.createNewFile();} catch (IOException e) {e.printStackTrace();} } try { testfile.process(root, new OutputStreamWriter(new FileOutputStream(file))); } catch (Exception ex) { ex.printStackTrace(); } return sw.toString(); }FrermarkerXml(){ init(); initData(); }public static void main(String[] args) { System.out.println(new FrermarkerXml().toString()); }}
FTL部分 --
wzq_main.ftl
<用户名>${user.name}</用户名><密码>${user.pwd}</密码><#list user.adds as add><address> <地址>List对象address值:${add.name} </地址></address></#list><#list user.keyadds?keys as addkey><address> key:${addkey} value:${user.keyadds[addkey].name}</address></#list>
JAVA部分
package examples;import java.io.IOException;import java.io.PrintWriter;import java.util.HashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;public class Hello extends HttpServlet{private Configuration cfg;public void init(){ cfg = new Configuration(); cfg.setServletContextForTemplateLoading(getServletContext(),"templates"); // cfg.setClassForTemplateLoading(this.getClass(), "/");}public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ Map root = new HashMap(); User user = new User(); user.setName("zhansan"); root.put("user",user); Template t =cfg.getTemplate("wzq_servlet.ftl"); response.setContentType("text/html; charset=" + t.getEncoding()); PrintWriter out = response.getWriter(); try{ t.process(root,out); }catch(TemplateException e){ e.printStackTrace(); }}}
FTL部分
wzq_servlet.ftl
<html><head><title>hello!</title></head><body><h1>hello-classpath ${user.name}!</h1></body></html>
- freemaker 使用思路
- 【freemaker教程】----使用freemaker自定义函数
- webwork使用freemaker
- freeMaker使用方式总结
- Freemaker的简述使用
- Spring3.0使用freemaker
- FreeMaker的使用
- FreeMaker的基本使用
- 七、SpringBoot使用Freemaker
- Freemaker项目使用笔记
- freemaker的使用
- 使用FreeMaker导出excel
- FreeMaker
- freemaker
- FreeMaker
- freemaker
- freemaker
- freemaker
- 2015百度之星资格赛解题报告
- C语言预处理命令总结
- JDK/ADT Android开发环境搭建 (二)
- iOS通过ttf文件加载字体
- 地形格子如果用triangle strip的话,顶点索引的设置方法 分享
- freemaker 使用思路
- PHP 顺序查找、二分查找
- android耗时任务_ANR
- Android项目自动生成build.xml,用Ant打包
- C++连接打印机(windows API)
- Django学习____简介
- WiFi GUI management tool
- iOS开发tableView分割线顶格,以及隐藏多余的单元格
- c++的基本语言知识(四 )