文档章节

【java开发】使用freemarker开发模板应用

yxzkm
 yxzkm
发布于 2016/11/25 14:41
字数 435
阅读 27
收藏 0

freemarker是类似于jsp的一种模板技术,开发者可以灵活地使用自定义模板,然后根据业务逻辑,将业务数据嵌入到模板当中,形成最终的业务数据展现板式。

首先,先定义一个名叫freeMakerTestTemplate.ftlh的模板文件:

<html>
<head>
  <title>Welcome!</title>
</head>
<body>
  <h1>Welcome ${user}!</h1>
  <p>Our latest product:
  <a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>

然后定义一个业务对象,Product:

package com.zkm.freemarker;

/**
 * Product bean; note that it must be a public class!
 */
public class Product {

    private String url;
    private String name;

    // As per the JavaBeans spec., this defines the "url" bean property
    // It must be public!
    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    // As per the JavaBean spec., this defines the "name" bean property
    // It must be public!
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

接下来,在主程序中,将业务数据和模板进行合并:

package com.zkm.freemarker;

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

public class FreeMarkerTest {

	// freemaker官方例子
	public static void main(String[] args) throws Exception {

		/* You should do this ONLY ONCE in the whole application life-cycle: */

		/* Create and adjust the configuration singleton */
		Configuration cfg = new Configuration(Configuration.VERSION_2_3_25);
		cfg.setDirectoryForTemplateLoading(new File("./zkm-live/templates/freemarker"));
		cfg.setDefaultEncoding("UTF-8");
		cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
		cfg.setLogTemplateExceptions(false);

		/*
		 * You usually do these for MULTIPLE TIMES in the application
		 * life-cycle:
		 */

		/* Create a data-model */
		Map<String, Object> root = new HashMap<String, Object>();
		root.put("user", "Big Joe");
		Product latest = new Product();
		latest.setUrl("products/greenmouse.html");
		latest.setName("green mouse");
		root.put("latestProduct", latest);

		/* Get the template (uses cache internally) */
		OutputStream out = null;
		Writer writer = null;
		try {
			Template temp = cfg.getTemplate("freeMakerTestTemplate.ftlh");

			/* Merge data-model with template */
			out = new FileOutputStream("./zkm-live/html/freemarker/test0.html");// 打印到文件
			writer = new OutputStreamWriter(out);
			temp.process(root, writer);
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				out.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			try {
				writer.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		// Note: Depending on what `out` is, you may need to call `out.close()`.
		// This is usually the case for file output, but not for servlet output.
	}

}

最终生成的html页面如下:

<html>
<head>
  <title>Welcome!</title>
</head>
<body>
  <h1>Welcome Big Joe!</h1>
  <p>Our latest product:
  <a href="products/greenmouse.html">green mouse</a>!
</body>
</html>

 

© 著作权归作者所有

共有 人打赏支持
yxzkm
粉丝 1
博文 24
码字总数 8724
作品 0
西城
私信 提问
freemaker开发学习《一》

 FreeMarker是一个非常优秀的模板引擎,这个模板引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模板中,从而生成标准输出.FreeMarker可以提供昜好的团队协作,对于界面开发人...

xiaml
2014/04/25
0
0
细数FreeMarker的优缺点

一、 FreeMarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。 所谓模板,就是一份已经写好了基本内容,有着固定格式的文档,其中空出或者用占位符标识的内容...

oecp
2011/04/22
0
3
Struts2与Freemarker的配置方法(附源码和插件)

Freemarker是模板引擎,也可以说是一种表现层的框架,它有自己的模板指令,开发者如果不熟悉这些语法,很难进行表现层的开发。Struts2框架技术对Freemarker做了很好的支持,开发人员只要熟悉...

oecp
2011/04/28
0
0
分享Struts2与Freemarker的配置方法

刚才在OECP社区看到一篇文章,《Struts2与Freemarker的配置方法》觉得很好,所以转发给大家分享一下。 Freemarker是模板引擎,也可以说是一种表现层的框架,它有自己的模板指令,开发者如果不...

oecp
2011/05/16
0
0
FreeMarker在eclipse中的入门例子

刚接触FreeMarker时,只是简单的了解FreeMarker的一些概念及工作原理,至于如何使用FreeMarker还不是非常清楚。随着学习的深入,才渐渐对FreeMarker有了更深入的理解。本文将从基础应用着手,...

oecp
2011/05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

局域网共享文件读写的实现方式

首先是设置共享目录,支持用户和密码等权限控制 然后我们可以使用Windows资源管理器操作共享目录下的文件 这中间隐藏了资源管理器帮我们建立目录映射和连接的过程,如果设置了用户名和密码,...

夏至如沫
16分钟前
2
0
Elasticsearch安装与配置

一、Docker安装ES 开发模式 可以使用以下命令快速启动Elasticsearch以进行开发或测试: $ docker run -p 9200:9200 -p 9300:9300 -d --name es -e "discovery.type=single-node" docker.ela...

吴伟祥
22分钟前
1
0
移动页面滚动穿透解决方案(荐)

移动页面滚动穿透解决方法目前有多种解决方案,我介绍下几种方案: 解决方案1:阻止冒泡。 //关键代码$(".sliders,.modals").on("touchmove",function(event){    event.preventDefau...

壹峰
22分钟前
0
0
调用infura实现java项目调用智能合约

https://infura.io/dashboard 注册一个帐号 添加一个project 可选择主网或者其他网络,然后复制地址放进pom.xml中 复制智能合约地址复制到pom.xml中 复制任意一个帐号的private key到pom.xml...

八戒八戒八戒
30分钟前
3
0
vue+koa2+token 登录验证

https://segmentfault.com/a/1190000017379244?utm_source=weekly&utm_medium=email&utm_campaign=email_weekly...

Js_Mei
33分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部