您当前的位置: 首页 >  ar

梁云亮

暂无认证

  • 1浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

FreeMarker 入门

梁云亮 发布时间:2020-02-01 14:56:16 ,浏览量:1

FreeMarker入门 简介

Freemarker是一种模板引擎;一种基于模板的、用来生成输出文本的通用工具; 采用Freemarker能够生成各种文本:HTML、XML、Java源代码等等。 FreeMarker是一个基于模板生成文本输出的通用工具,使用纯Java编写。 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据 在这里插入图片描述 FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件。 FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境。 FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库。 FreeMarker是免费的。

FreeMarker特性 通用目标

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

强大的模板语言

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

通用数据模型

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

为Web准备

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

智能的国际化和本地化

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

强大的XML处理能力

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

示例代码框架 第一步:新建Maven项目,添加依赖:

  org.freemarker
  freemarker
  2.3.29

第二步:创建Freemarker工具类:

1:创建一个 Configuration 对象,直接 new 一个对象。构造方法的参数就是freemarker 的版本号。 2:设置模板文件所在的路径。 3:设置模板文件使用的字符集。一般就是 utf-8. 4:加载一个模板,创建一个模板对象。 5:创建一个模板使用的数据集,可以是 pojo 也可以是 map。一般是 Map。 6:创建一个 Writer 对象,一般创建一 FileWriter 对象,指定生成的文件名。 7:调用模板对象的 process 方法输出文件。 8:关闭流

public class FreemarkerUtil {

    public static void execute(String ftlNameWithPath, Map data, Writer out) throws IOException, TemplateException {
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_25);//创建Freemarker配置实例

        int i = ftlNameWithPath.lastIndexOf("/") == -1 ? ftlNameWithPath.lastIndexOf("\\") : ftlNameWithPath.lastIndexOf("/");

        cfg.setDirectoryForTemplateLoading(new File(ftlNameWithPath.substring(0, i + 1)));//注意这里是文件夹的路径,不是文件的路径

        cfg.setDefaultEncoding("UTF-8");

        Template t1 = cfg.getTemplate(ftlNameWithPath.substring(i + 1));//加载模板文件
        t1.process(data, out);
        out.flush();
        out.close();
    }

}
第三步:在resources目录下创建模板文件test.ftl:
${username}:你好,欢迎学习Freemarker!
第四步:测试代码:
@Test
public void fun1() throws Exception {
    String dir = "src\\main\\resources\\test.ftl";//模板路径
    //创建数据模型
    Map data = new HashMap();
    data.put("username", "张三");

    //显示生成的数据,//将合并后的数据打印到控制台
    Writer out = new StringWriter();

    FreemarkerUtil.execute(dir, data, out);
    System.out.println(out.toString());
}
@Test
public void fun2() throws Exception {
    String dir = "src\\main\\resources\\test.ftl";//模板路径
    //创建数据模型
    Map data = new HashMap();
    data.put("username", "张三");

    //将生成的数据保存到src/main/webapp/demo.txt文件中
    Writer out = new FileWriter(new File("src/main/webapp/demo.txt"));
    FreemarkerUtil.execute(dir, data, out);
}
关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0414s