zoukankan      html  css  js  c++  java
  • FreeMarker系列学习笔记

    FreeMarker是一个非常优秀的模板引擎,这个模板引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模板中,从而生成标准输出.FreeMarker可以提供昜好的团队协作,对于界面开发人员而言,他们只关心界面(也就是模板文件)的开发,而无需理会底层数据;而对于业务逻辑开发者,他们只需要关心负责将需要显示的数据填入数据模型--FreeMarker负责合并数据模型和模板,从而生成标准输出.
      FreeMarker特别适应于MVC模式的web应用,虽然FreeMarker具有一些编程能力,但这种编程能力非常有限,无法实现业务逻辑,保能提供一些数据格式的转换。因此,通常由Java程序准备要显示的数据,由FreeMarker模板引擎来生成页面,而FreeMarker模板则则提供页面布局支持,从而能更好地规范MVC架构,保证视图和业务逻辑的分离。
    除此之外,FreeMarker也是与web容器,也就是FreeMarker并不一定需要运行在web容器中。FreeMarker同样可以应用于非web应用程序环境。而且,FreeMarker并不是只能生成Html页面,它也可以生成各种文本,如xml,rtf,java程序。
    struts2可以非常简单地使用FreeMarker模板作为视图技术,对于传统的jsp页面而言,FreeMarker是一个绝佳的替代方案。

      除此之外,Struts2默认采用FreeMarker作为其模板文件,而Struts2所有的主题模板文件都是采用FreeMarker编写的。因此,如果我们需要扩展struts2的主题,也需要熟悉FreeMarker技术。

    为了使用FreeMarker来将数据模型中的值合并到模板文件中
    一般情况下按下述步骤操作

    第一步:创建Configuration实例,该实例负责管理FreeMarker的模板加载路径,负责生成模板实例
    第二步:使用Configuration实例来生成Template实例,同时需要指定模板文件
    第三步:填充数据模型,数据模型就是一个Map对象
    第四步:调用Template实例的process方法完成合并

      在web应用中使用FreeMarker与在Java应用使用并没有太大的区别,一样需要定义模板文件,但此时的模板文件应该是HTML模板---也就是该板块能生成一个HTML页面。

     

    在JAVA程序中使用FreeMarker

    package ish;
    import java.util.*;
    import java.io.*;
    import freemarker.template.*;


    public class HelloFreeMarker
    {
        private Configuration cfg;
       
        public void init() throws Exception
     {
      //第一步
            //初始化FreeMarker配置
            //创建一个Configuration实例
            cfg = new Configuration();
            //设置FreeMarker的模版文件位置
            cfg.setDirectoryForTemplateLoading(new File("templates"));
        }
       
     public void process()throws Exception
     {

      //第二步
            Template t = cfg.getTemplate("test.ftl");
            t.process(root, new OutputStreamWriter(System.out));

      //第三步
      Map root = new HashMap();
            root.put("name", "FreeMarker!");
      root.put("msg" , "您已经完成了第一个FreeMarker的示例");

     }

     public static void main(String[] args)throws Exception
     {
      HelloFreeMarker hf = new HelloFreeMarker();
      hf.init();
      //第四步
      hf.process(); 
     }

    }

     

    关于FreeMarket的各种指令,可以在自行查看相关书籍或在网上搜索相关文章,阿堂在这里就不讨论这些了!


  • 相关阅读:
    RBAC权限管理模型 产品经理 设计
    Redisson 分布式锁
    Jenkins下载历史Build版本的归档文件
    Java JPA @Transient 在Hibernate中应用
    Solving the Top ERP and CRM Metadata Challenges with erwin & Silwood
    MySQL 字符串 分割 多列
    MySQL CONCAT opposite
    Web并发页面访问量统计实现
    UNIX网络编程读书笔记:基本UDP套接口编程
    UNIX网络编程调试工具:tcpdump、netstat和lsof
  • 原文地址:https://www.cnblogs.com/baiduligang/p/4247177.html
Copyright © 2011-2022 走看看