zoukankan      html  css  js  c++  java
  • freemaker优缺点

      • 1.什么是FreeMarker?FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。FreeMarker被设计用来生成HTMLWeb页面,特别是基于MVC模式的应用程序。所谓模板,就是一份已经写好了基本内容,有着固定格式的文档,其中空出或者用占位符标识的内容,由使用者来填充,不同的使用者给出的数据是不同的。在模板中的占位符,在模板运行时,由模板引擎来解析模板,并采用动态数据替换占位符部分的内容。FreeMarker不是一个Web应用框架
      • 1.什么是 FreeMarker? 


        FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。FreeMarker被设计用来生成HTMLWeb页面,特别是基于MVC模式的应用程序。



        所谓模板,就是一份已经写好了基本内容,有着固定格式的文档,其中空出或者用占位符标识的内容,由使用者来填充,不同的使用者给出的数据是不同的。在模板中的占位符,在模板运行时,由模板引擎来解析模板,并采用动态数据替换占位符部分的内容。



        FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件,FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java文件等。


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


        FreeMaker教程(一)-----FreeMaker简介_Java


        2.FreeMake的优点


        分离表现层和业务逻辑


        使用 JSP 开发过程中在页面中大量的存在业务逻辑的代码,使得页面内容凌乱,在后期大量的修改维护过程中就变得非常困难。 FreeMarker 根本不支持 Java 脚本代码,而是使用 el 表达式来输出展示数据。 FreeMarker 的设计初衷就是: 模板 + 数据模型 = 输出 ,模板只负责数据在页面中的表现,不涉及任何的逻辑代码,而所有的逻辑都是由数据模型来处理的。用户最终看到的输出是模板和数据模型合并后创建的


        提高开发效率


        在我们以往的开发中,使用的都是 JSP 页面来展示数据的,即所谓的表现层。我们都知道, JSP 在第一次执行的时候需要转换成 Servlet 类,开发阶段进行功能调适时,需要频繁的修改 JSP ,每次修改都要编译和转换,那么试想一天中我们浪费在程序编译的时间有多少。相对于 JSP 来说, FreeMarker 模板技术不存在编译和转换的问题,所以就不会存在上述问题。而且开发过程中,我们在不必在等待界面设计开发人员完成页面原形后,我们再来开发程序。


        分工明确


        以往用JSP展现数据时,程序员并不熟悉界面设计技术,反之界面开发人员,也并不熟悉程序语言。协调工作很困难,使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及Web页面的其他可视化方面,不用理会数据;而程序开发人员则专注于系统实现,负责为页面准备要显示的数据


        3.FreeMarker的缺点


        1.FreeMarker的缺点一,应用FreeMarker模板技术,在修改模板后,可能会看到已经过期的数据。如:生成静态的HTML页面后,如果一旦模板改变,而没有及时更新模板生成的HTML页面的话,用户看到的就是过期的数据。 


        2.FreeMarker的缺点二,FreeMarker模板技术在应用过程中,FreeMarker中的变量必须要赋值,如果不赋值,那么就会抛出异常。想避免错误就要应用if/elseif/else 指令进行判段,如果对每一个变量都判断的话,那么则反而增加了编程的麻烦。 


        3.FreeMarker的缺点三,FreeMarker的map限定key必须是string,其他数据类型无法操作。 


        4.FreeMarker的缺点四,FreeMarker不支持集群应用。为了编成的方便性,把序列化的东西都放到了Session中,如Session,request等,在开发的过程中确实方便,但如果将应用放到集群中,就会出现错误。 


        4.FreeMarker特性



        1、通用目标



        能够生成各种文本:HTML、XML、RTF、Java源代码等等 
        易于嵌入到你的产品中:轻量级;不需要Servlet环境 
        插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等 
        你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器



        2、强大的模板语言



        所有常用的指令:include、if/elseif/else、循环结构 
        在模板中创建和改变变量 
        几乎在任何地方都可以使用复杂表达式来指定值 
        命名的宏,可以具有位置参数和嵌套内容 
        名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突 
        输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换



        3、通用数据模型



        FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示 
        你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰



        4、为Web准备



        在模板语言中内建处理典型Web相关任务(如HTML转义)的结构 
        能够集成到Model2 Web应用框架中作为JSP的替代 
        支持JSP标记库 
        为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员



        5、智能的国际化和本地化



        字符集智能化(内部使用UNICODE) 
        数字格式本地化敏感 
        日期和时间格式本地化敏感 
        非US字符集可以用作标识(如变量名) 
        多种不同语言的相同模板



        6、强大的XML处理能力



        <#recurse> 和<#visit>指令(2.3版本)用于递归遍历XML树 
        在模板中清楚和直觉的访问XML对象模型 
        开源论坛 JForum 就是使用了 FreeMarker 做为页面模板。 


        5.Freemarker生成静态页面的原理



        Freemarker 生成静态页面,首先需要使用自己定义的模板页面,这个模板页面可以是最最普通的html,也可以是嵌套freemarker中的 取值表达式, 标签或者自定义标签等等,然后后台读取这个模板页面,解析其中的标签完成相对应的操作, 然后采用键值对的方式传递参数替换模板中的的取值表达式,做完之后 根据配置的路径生成一个新的html页面, 以达到静态化访问的目的。


        6.Freemarker提供的标签


        Freemarker提供了很多有用 常用的标签,Freemarker标签都是<#标签名称>这样子命名的,${value} 表示输出变量名的内容 ,具体如下:



        1、list:该标签主要是进行迭代服务器端传递过来的List集合,比如:


        <#list nameList as names> 
        ${names} 
        </#list> 

        names是list循环的时候取的一个循环变量,freemarker在解析list标签的时候,等价于:


        for (String names : nameList) { 
        System.out.println(names); 

        2、if:该标签主要是做if判断用的,比如:


        <#if (names=="陈靖仇")> 
        他的武器是: 十五~~ 
        </#if> 

        这个是条件判断标签,要注意的是条件等式必须用括号括起来, 等价于:


        if(names.equals("陈靖仇")){ 
        System.out.println("他的武器是: 十五~~"); 

        3、include:该标签用于导入文件用的。 


        <#include "include.html"/> 

        这个导入标签非常好用,特别是页面的重用。



        另外在静态文件中可以使用${} 获取值,取值方式和el表达式一样,非常方便。 

  • 相关阅读:
    记第一场省选
    POJ 2083 Fractal 分形
    CodeForces 605A Sorting Railway Cars 思维
    FZU 1896 神奇的魔法数 dp
    FZU 1893 内存管理 模拟
    FZU 1894 志愿者选拔 单调队列
    FZU 1920 Left Mouse Button 简单搜索
    FZU 2086 餐厅点餐
    poj 2299 Ultra-QuickSort 逆序对模版题
    COMP9313 week4a MapReduce
  • 原文地址:https://www.cnblogs.com/shan1393/p/9425229.html
Copyright © 2011-2022 走看看