FreeMarker指南

来源:互联网 发布:9月编程语言排行榜 编辑:程序博客网 时间:2024/05/29 16:31

                  

                    一、首先了解FreeMarker

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

                 设计用来生成 HTML Web页面,特别是基于MVC模式的应用程序。虽然FreeMarker具有一些编程的能力,但

                 通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据,通俗一点来讲,

                 FreeMarker就是一种基于模板的、用来生成输出文本的通用工具,基于Java的开发包和类库用来生成输出文本

                 的通用工具,基于Java的开发包和类库


                       二、FreeMarker的优点

               1.分离表现层和业务逻辑                                               
                                 使用JSP开发过程中在页面中大量的存在业务逻辑的代码,使得页面内容凌乱,在后期大量的修改

                       维护过程中就变得非常困难 。 FreeMarker根本不支持Java脚本代码,而是使用el表达式来输出展示数据。

                       FreeMarker的设计初衷就是:。模板+数据模型=输出,模板只负责数据在页面中的表现,不涉及任何的

                       逻辑代码,而所有的逻辑都是由数据模型来处理的。  用户最终看到的输出是模板和数据模型合并后创建的。                        
                        2.智能的国际化和本地化                        
                                  字符集智能化(内部使用UNICODE)、数字格式本地化敏感、日期和时间格式本地化敏感、非US

                       字符集 可以用作标识(如变量名)多种不同语言的相同模板  。

                   
                        3.提高开发效率                        
                                   在我们以往的开发中,使用的都是JSP页面来展示数据的,即所谓的表现层。我们都知道,JSP在

                        第一次执行的时候需要转换成Servlet类,开发阶段进行功能调适时,需要频繁的修改JSP,每次修改都要

                        编译和转换,那么试想一天中我们浪费在程序编译的时间有多少。 相对于JSP来说,FreeMarker模板技术

                       不存在编译和转换的问题,所以就不会存在上述问题。而且开发过程中,  我们在不必在等待界面设计开发

                      人员完成页面原形后,我们再来开发程序。                        
                        
                       4. 分工明确                        
                                   以往用JSP展现数据时,程序员并不熟悉界面设计技术,反之界面开发人员,也并不熟悉程序语言。

                       协调工作很困难 ,使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及Web页面的其

                       他可视化方面,不用理会数据;而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。


               三、FreeMarker的常用指令        
            
                       1、if指令
            
                            <#if(columns?size>10)> 
                             <#ifpo_index%2==0> 
                                 …. 
                             </#if> 
                             <#else> 
                                 … 
                              </#if> 
           
                        2、switch、case、default、break指令
            
                                      虽然FreeMarker提供了switch指令,但它并不推荐使用switch指令来控制也输出,而是推荐使用

                           FreeMarker的if..elseif..else指令来替代它。
            
                        3、list、break指令
            
                                       list指令时一个典型的迭代输出指令,用于迭代输出数据模型中的集合。list指令的语法格式如下:
            
                                              <#list sequenceas item> 
                                                ... 
                                              </#list> 
            
                         除此之外,迭代集合对象时,还包括两个特殊的循环变量:
                                       a、item_index:当前变量的索引值。
                                       b、item_has_next:是否存在下一个对象也可以使用<#break>指令跳出迭代
            
                        4、include指令
            
                                  include指令的作用类似于JSP的包含指令,用于包含指定页,include指令的语法格式如下
            
                                          <#include filename [options]
            
                             在上面的语法格式中,两个参数的解释如下
            
                                      a、filename:该参数指定被包含的模板文件
            
                                      b、options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,

                                           encoding指定包含页面时所使用的解码集,而parse指定被 包含是否作为FTL文件来解析。

                                            如果省略了parse选项值,则该选项值默认是true
            
                       5、 import指令
            
                              该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的

                  语法格式如下:
            
                                           <#import path as mapObject>
            
                               在上面的语法格式中,path指定要被导入的模板文件,而mapObject是一个Map对象名,通过这行代码,

                    将导致path模板中的所有变量都被放置 在mapObject中
            
                                            <#import "/lib/common.ftl"as com>
            
                       6、noparse指令
            
                                 noparse指令指定FreeMarker不处理该指令里包含的内容,该指令的语法格式如下:
            
                                              <#noparse> 
                                                  ... 
                                              </#noparse> 
            
                       7、assign指令
            
                                   它用于为该模板页面创建或替换一个顶层变量
                  
                       8、setting指令
            
                                 该指令用于设置FreeMarker的运行环境,该指令的语法格式如下:
            
                                         <#setting name = value>
            
                                  name的取值范围包括如下几个:
            
                                              locale:该选项指定该模板所用的国家/语言选项
            
                                              number_format:该选项指定格式化输出数字的格式
            
                                              boolean_format:该选项指定两个布尔值的语法格式,默认值是"true、false"
            
                                              date_format,time_format,datetime_format:该选项指定格式化输出日期的格式
            
                                              time_zone: 设置格式化输出日期时所使用的时区

            四、java代码+测试

               1、创建Java项目

                    


                    2、导所需jar包


                                      

                                


                                3、1  创建模板目录

                         

                    3、2   在目录下创建模板文件

                         

                  4、Java代码

                        4.1 创建一个包以及一个class类

                               package com.java.fm;                    
                            
                               import java.io.File;                    
                               import java.io.OutputStreamWriter;                    
                               import java.io.Writer;                    
                               import java.util.HashMap;                    
                               import java.util.Map;                    
                            
                              import freemarker.template.Configuration;                    
                              import freemarker.template.Template;                    
                            
                    
                           public class TestFreeMarker {                    
                            
                            
                                   @SuppressWarnings("test_FM")                    
                                   public static void main(String[] args) throws Exception {                    
                            
                            
                                           //创建freemarker配置实例                    
                                           Configuration cfg = new Configuration();                    
                            
                                           //设置模板加载的目录                    
                                           cfg.setDirectoryForTemplateLoading(new File("test_fm"));                    
                            
                                          //创建数据模型                    
                                          Map<String,Object> map = new HashMap<String,Object>();                    
                                               map.put("user", "张三");                    
                            
                                          //加载模板文件                    
                                          Template template = cfg.getTemplate("test.ftl");                    
                            
                                         //显示生成数据                    
                                        Writer out = new OutputStreamWriter(System.out);                    
                                          template.process(map, out);                    
                            
                                          out.flush();                    
                                          out.close();                    
                            
                                } 
 
  

                        4.2 、在模板中写测试代码

                               
                         4.3、测试    run  or  debug

                                

1 0
原创粉丝点击