以下内容来自:http://www.oschina.net/p/freemarker

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

FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。

虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据,简单来讲就是模板加数据模型,然后输出页面(如下图)

FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件

FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境

FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库

FreeMarker是免费的

在此处, 我们使用maven来管理项目

pom.xml

<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
<dependency>
<groupId>Junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

 然后我们创建一个freemarkerUtil 文件, 主要是用来寻找模板,代码如下

package com.kenson.util;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map; import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException; public class FreemarkerUtil {
// 我们要传入的就是ftl 的文件名 比如 01.ftl
public Template getTemplate(String name){
try {
Configuration config = new Configuration(Configuration.VERSION_2_3_28);//这个版本号要和包版本一致
// 通过类路径来找ftl 模板文件 找到 存放ftl 文件的地址
config.setClassForTemplateLoading(this.getClass(), "/ftl");
Template temp = config.getTemplate(name);
System.out.println("temp:"+temp);
return temp;
} catch (Exception e) {
//捕捉到异常就返回空
e.printStackTrace();
return null;
}
}
// 输出到一个文件中
public void print (String name , Map<String, Object>root){
//通过Template可以将模板文件输出到相应的文件流
try {
Template template = this.getTemplate(name);
System.out.println("template:"+template);
// 创建一个流, 将输出的方式放到流里面
template.process(root ,new PrintWriter(System.out));
} catch (TemplateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } // print HTML file 输出为html 页面 --- 很常用的一种
public void fprint(String name, Map<String,Object> root, String outFile){
FileWriter out = null; //通过一个文件输出流可以将内容写到相应文件中了, 但是需要用的路径是绝对路径
try {
out = new FileWriter(new File("D:/java_workpace/freemarker_01/src/main/pages/"+outFile)); Template temp = this .getTemplate(name);
temp.process(root,out);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TemplateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(out != null){
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}

然后我们就要做 ftl 模板文件, 如果这个模板文件是用来生成html页面的, 那么我们可以这样操作, 先写一个html页面, 然后将其中需要动态输出的内容替换成${ ***  }的形式

然后我们将文件的后缀名改为ftl, 最后的效果如下

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${user.id}---------${user.name}-------${user.age}
<#if user.age lt 12>
${user.name}: 还是一个小孩
<#elseif user.age == >
${user.name}:刚刚成年
<#else >
${user.name}:已经成年
</#if>
</body>
</html>

写好了之后, 我们就可以用junit 进行测试了(不详细解释junit的用法了), 直接上代码

    @Test
public void test01(){
// 创建数据模型
Map<String ,Object> root = new HashMap<String,Object>();
// 为数据模型添加值
root.put("username","张三");
// 将数据模型中的值和模板文件进行整合 输出控制台
frr.print("01.ftl", root);
// 这里是将数据输出到一个文件, 文件的后缀名为html
frr.fprint("01.ftl", root, "01.html"); }
@Test
public void test02(){
User user = new User(12,"张三",135); Map<String,Object> root = new HashMap<String, Object>();
root.put("user", user);
// freemarker 输出对象
frr.fprint("03.ftl", root,"03.html");
}

运行之后就能在下面设置的地址中找到运行出来的html文件(如果输出的是html文件),然后点开浏览器运行,你就会发现,里面已经有了动态生成的数据了

  out  = new FileWriter(new File("D:/java_workpace/freemarker_01/src/main/pages/"+outFile));

  

Freemarker 的基础使用 (一)的更多相关文章

  1. Freemarker 的基础使用 (二)

    freemarker 的基础使用二 ftl 文件 <html> <head> <meta http-equiv="Content-Type" cont ...

  2. FreeMarker的基础语法

    FreeMarker语言 FreeMarker语言概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写. FreeMarker被设计用来生成HTML Web ...

  3. FreeMarker的基础语法使用 && 心得和技巧

    FreeMarker语言 FreeMarker语言概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写. FreeMarker被设计用来生成HTML Web ...

  4. SpringBoot整合freemarker 引用基础

    原 ElasticSearch学习笔记Ⅲ - SpringBoot整合ES 新建一个SpringBoot项目.添加es的maven坐标如下: <dependency> <groupI ...

  5. Freemarker的基本语法及入门基础

    freemarker的基本语法及入门基础一.freemarker模板文件(*.ftl)的基本组成部分        1. 文本:直接输出的内容部分        2. 注释:不会输出的内容,格式为&l ...

  6. 【原创】Java基础之Freemarker(1)模板加载及清空机制

    一 freemarker加载模版机制 freemarker中的配置项template_update_delay表明模版的缓存时间,单位是s,超过缓存时间则从磁盘加载最新的模版,具体细节如下: 1)fr ...

  7. FreeMarker基础语法,宏,引用 等

    FreeMarker的插值有如下两种类型: 1,通用插值${expr}; 2,数字格式化插值:#{expr}或#{expr;format} ${book.name?if_exists } //用于判断 ...

  8. Freemarker 基础概念

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

  9. FTL(FreeMarker)基础

    FreeMarker标签使用一.FreeMarker模板文件主要有4个部分组成1.文本,直接输出的部分2.注释,即<#--...-->格式不会输出3.插值(Interpolation):即 ...

随机推荐

  1. POJ 1961 Period 还是next数组的含义、

    题意:求所给串的前缀(包括原串)中有多少循环串(子串长度至少要是周期的两倍) 思路:还是next数组的应用问题.如果不懂next数组的话 http://www.cnblogs.com/sasuke-/ ...

  2. Java一行代码可声明多个同类变量

    Java支持一句语句声明多个同类变量. Example: String a = "Hello", c = "hello"; int x = 5, y = 5;

  3. 版本号/缓存刷新 laravel mix函数

    很多开发者会给编译的前端资源添加时间戳或者唯一令牌后缀以强制浏览器加载最新版本而不是代码的缓存副本.Mix 可以使用 version 方法为你处理这种场景. version 方法会自动附加唯一哈希到已 ...

  4. 你以为SSL是安全的吗?

    在现代的IT安全领域,很大程度上依赖SSL来保障通讯安全.但SSL是安全的吗? 在2005年,王小云证明SHA-1能在较短的时间内找到碰撞.王小云发现SHA-1的安全弱点是偶然还是必然? 就我所知,各 ...

  5. P1060 梦中的统计

    题目描述 Bessie 处于半梦半醒的状态.过了一会儿,她意识到她在数数,不能入睡. Bessie的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数.她开始注意每一个数码(0..9):每一个数码在计 ...

  6. Roslyn 使用 Target 替换占位符方式生成 nuget 打包

    本文告诉大家如何编写在编译过程修改打包文件 在项目文件的相同文件夹可以放一个 nuspec 用来告诉 VisualStudio 如何打包 现在尝试创建一个项目 NearjerbetearDeeyito ...

  7. linux 存取 I/O 内存

    在一些平台上, 你可能逃过作为一个指针使用 ioremap 的返回值的惩罚. 这样的使用不 是可移植的, 并且, 更加地, 内核开发者已经努力来消除任何这样的使用. 使用 I/O 内 存的正确方式是通 ...

  8. Linux 内核kobject 层次, kset, 和子系统

    kobject 结构常常用来连接对象到一个层级的结构中, 匹配正被建模的子系统的结构. 有 2 个分开的机制对于这个连接: parent 指针和 ksets. 在结构 kobject 中的 paren ...

  9. vue-learning:10-template-ref

    使用ref直接访问DOM元素 传统DOM操作或jQuery操作DOM,都必须是选择器先选择对应的DOM元素.比如: <button id="btn">按钮</bu ...

  10. 轮播图模块(vue)

    轮播图模块(vue) 通过属性方式传值 值为一个数组.每一项含有imgUrl(图片地址).link(跳转链接),link为可选属性 <template> <div class=&qu ...