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>

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2017-07-25 11:23  梦豆学院  阅读(1152)  评论(0编辑  收藏  举报