FreeMarker基本使用

 

FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 

l         FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 

l         虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)

模板 + 数据模型 = 输出

 

l         FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件 

l         FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境 

l         FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库 

l         FreeMarker是免费的 

 
(1)实例代码:
 1 package freemaker;
 2  
 3 import java.io.File;
 4 import java.io.FileWriter;
 5 import java.io.Writer;
 6 import java.util.HashMap;
 7 import java.util.Map;
 8  
 9 import freemarker.template.Configuration;
10 import freemarker.template.Template;
11  
12 public class FreeMarkerDemo {
13  
14     public static void main(String[] args) {
15         // 配置对象 .html
16         Configuration conf = new Configuration();
17         // 模板路径
18         String dir = "D:\\workspace2\\freemaker\\ftl\\";
19         try {
20             // 导入模板目录
21             conf.setDirectoryForTemplateLoading(new File(dir));
22             // 获取模板
23             Template template = conf.getTemplate("freemaker.html");
24             // 数据
25             Map root = new HashMap();
26             root.put("world", "世界");
27             // 输出流
28             Writer out = new FileWriter(new File(dir + "hello.html"));
29             // 生成开始
30             template.process(root, out);
31             out.flush();
32             out.close();
33         } catch (Exception e) {
34             e.printStackTrace();
35         }
36  
37         System.out.println("生成完毕");
38  
39     }
40 }

 

(2)返回对象
1             Person p = new Person();
2             p.setId(9527);
3             p.setName("华安");
4             root.put("per", p);
5     
6             编号:${per.id}<br/>
7             姓名:${per.name}<br/>

 

 
(3)遍历List
 1     List<Person> list = new ArrayList<Person>();
 2  
 3             for(int i =0;i<10;i++){
 4                 Person p = new Person();
 5                 p.setId(9527+i);
 6                 p.setName("华安"+i);
 7                 list.add(p);
 8             }
 9             root.put("list", list);
10  
11             <#list list as p>
12                 ${p.id} -- ${p.name}
13             </#list>

 

    
 
(4)遍历Map
            Map map = new HashMap();
            map.put("id", "1001");
            map.put("name", "秋香");
            root.put("map", map);
 
            <#list map?keys as key>
                ${map[key]}
            </#list>

 

 
 
(5)遍历List<Map>
  
 1      Map map = new HashMap();
 2             map.put("id", "1001");
 3             map.put("name", "秋香");
 4             Map map2 = new HashMap();
 5             map2.put("id", "1002");
 6             map2.put("name", "石榴姐");
 7  
 8             List<Map> maplist = new ArrayList<Map>();
 9             maplist.add(map);
10             maplist.add(map2);
11             root.put("maplist", maplist);
12             
13             <#list maplist as map>
14                 <#list map?keys as key>
15                     ${map[key]}
16                 </#list>
17            </#list>

 

 
(6)遍历if else
1     <#list ["星期一","星期二","星期三"] as n>
2     <#if n!="星期一">
3         ${n}
4     <#else>
5         您好今天是星期一
6     </#if>
7 </#list>

 

 
(7)时间处理
1     root.put("dt", new Date());
2     年月时间:${dt?datetime}<br/>
3     时间:${dt?time}

 

 
Freemarker 静态化加入项目中
 1 接口;StaticPageService
 2     public void staitcPage();
 3 实现类:
 4  
 5 /**
 6  * 生成静态页实现类
 7  */
 8 public class StaticPageServiceImpl implements StaticPageService,ServletContextAware{
 9  
10     private Configuration conf;
11  
12     public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) {
13         this.conf = freeMarkerConfigurer.getConfiguration();
14     }
15  
16  
17     //静态化方法
18     public void productIndex(Map<String,Object> root,Integer id){
19         //String dir = "C:\Users\lx\workspace\babasport12\";
20         //设置模板的目录
21         //conf.setDirectoryForTemplateLoading(dir);
22  
23         //输出流   从内存写出去  磁盘上
24         Writer out = null;
25         try {
26             //读进来  UTF-8  内存中
27             Template template = conf.getTemplate("productDetail.html");
28             //获取Html的路径
29             String path = getPath("/html/product/" + id +  ".html");//278.html
30  
31             File f = new File(path);
32             File parentFile = f.getParentFile();
33             if(!parentFile.exists()){
34                 parentFile.mkdirs();
35             }
36             //输出流
37             out = new OutputStreamWriter(new FileOutputStream(f), "UTF-8");
38             //处理模板
39             template.process(root, out);
40         } catch (Exception e) {
41             // TODO Auto-generated catch block
42             e.printStackTrace();
43         }finally{
44             if(out != null){
45                 try {
46                     out.close();
47                 } catch (IOException e) {
48                     // TODO Auto-generated catch block
49                     e.printStackTrace();
50                 }
51             }
52         }
53     }
54     //获取路径
55     public String getPath(String name){
56         return servletContext.getRealPath(name);
57     }
58  
59     private ServletContext servletContext;
60  
61     @Override
62     public void setServletContext(ServletContext servletContext) {
63         this.servletContext = servletContext;
64     }
65 }
66 67    <!-- 配置Freemarker -->
68    <bean id="staticPageService" class="cn.itcast.core.service.staticpage.StaticPageServiceImpl">
69            <property name="freeMarkerConfigurer">
70                <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
71                    <property name="templateLoaderPath" value="/WEB-INF/ftl/"/>
72                    <property name="defaultEncoding" value="UTF-8"/>
73                </bean>
74            </property>
75    </bean>

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/mengdou/p/7233073.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeMarker官方参考文档总共有四份,它们分别是  Designer's Guide(网上已有翻译,主要从FreeMarker 的概念上介绍)  Programmer's Guide(本文档所以翻译的部分,主要从框架的设计方面介绍)  XML Processing Guide(对XML数据模型处理的介绍)  Reference(FreeMarker 的参考文档,语言使用介绍) 中文翻译之所以选择 Programmer's Guide 是因为个人觉得该部分对如何实现 FreeMarker 进行了比较深入的阐述。有助于读者很好的了解其运作机制,以及去理解其他 模板引擎(如Velocity)的工作机理。 注:由于原文档部分内容直译可能难于被读者理解,所以有些地方采用意译为主,因此在翻译用词上 难 免 可 能 会 有 出 入 , 大 家 对 翻 译 的 内 容 有 任 何 意 见 都 可 以 给 我 直 接 发 邮 件 告 知 motomagice@yahoo.com.cn 目录 前言.........................................................................3 一、快速入门..............................................................4 1.1、创建配置实例..............................................................................4 1.2、创建数据模型(Data Model) ..........................................................4 1.3、获取模版(template) ..................................................................5 1.4、把模版与数据模型合并...................................................................6 1.5、完整的代码 ................................................................................6 二、数据模型(Data Model) ..........................................7 2.1、基础类型...................................................................................7 2.2、Scalar类型(单值对应的Data Model)...............................................8 2.3、容器类型...................................................................................8 2.4、方法变量...................................................................................9 2.5、转换器变量 .............................................................................. 10 2.6、节点变量................................................................................. 12 2.7、对象包裹................................................................................. 12 三、配置(Configuration)........................................... 15 3.1、基础....................................................................................... 15 3.2、共享变量................................................................................. 15 3.3、配置参数................................................................................. 16 3.4、加载模板................................................................................. 17 3.5、异常处理................................................................................. 19 四、其它说明............................................................ 20 4.1、变量....................................................................................... 20 4.2、字符编码................................................................................. 20 4.3、多线程.................................................................................... 21 4.5、Bean 包裹................................................................................ 21

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值