FreeMarker入门案例,及其概念

Freemarker是java的免费模板引擎,主要用于MVC中的view层,生成html展示数据给客户端,可以完全代替jsp。FreeMarker是一个模板引擎,一个机遇模板生成文本输出的通用工具,使用纯Java编写,模板中没有业务逻辑,外部java程序通过数据库操作等生成数据传入template中,然后输出页面。它能够生成各种文本:Html,XML,RTF源代码等,而且不需要Servlet环境,并且可以从任何源载入模板,如程序生成,本地文件,数据库等等。

 

主要应用场景:用来生成HTML今天化页面进行缓冲,静态化页面,降低服务器计算压力,用于生成各种文本数据。

 

本案例是新手案例,基本生成静态化页面:

 

freemarker基本概念:

模板:

用于定义生成格式文件,在其中包含一些动态改变的命令,用于接受数据模型,生成对应的格式文件。

 

数据模型:

用于给模板提供数据,定义了一个树型结构用于存储数据。

 

注:数据模型不是文本文件,对于java语言来说,root就像有getUser()和getLatestProduct()方法的java对象。

 

freemarker常用语法:

${…}:FreeMarker将会输出真实的值来替换大括号内的表达式。(jsp的类似EL表达式)

FTL标签:属于FerrMarker的指令模式不会在输出文本中打印的,这些标签以#开头

注释:使用<#--…-->

其他任何不是FTL标签,插值或注释的内容将被视为静态文本, 这些东西不会被FreeMarker所解析;会被按照原样输出出来。

指令:

if指令:<#if 表达式>显示的内容</#if>

使用if指令可以跳过一些不想显示的内容。

如:

Welcome ${user}<#if user == "Big Joe">, our beloved leader</#if>!

如果表达式为true,则显示后面的内容,否则不显示。

else指令:<#if condition>…<#else>….<#if>

list指令:

用于显示列表数据

<#list users as user>

<H1>User.getName()</H1>

<#list>

如果Users中没有人,它仍然会输出<h1></h1>,为了避免这种情况:

则:

<#list misc.fruits>

<ul>

<#items as fruit>

<li>${fruit}

</#items>

</ul>

 </#list>

此时list会被视为一个整体,如果Users为空则不会输出<ul>

分隔符:

要求获取人名后需要分割符,则:

<#list users as user>

<H1>User.getName()<#sep>,</#sep></H1>

<#list>

list指令还可以与else搭配进行使用:

<#list misc.fruits>

<p>Fruits:

<ul>

<#items as fruit>

<li>${fruit}<#sep> and</#sep>

</#items>

</ul>

<#else>

 <p>We have no fruits

. </#list>

 

Include指令:

使用include指令,我们可以在模板中插入其他文件内容:

<#include "/copyright_footer.html">

 

处理不存在的变量!:

可以使用!来标记不存在的变量,给与默认值:

<h1>Welcome ${user!"visitor"}!</h1>

可以通过??来访问一个变量是否存在。

<#if user??><h1>Welcome ${user}!</h1></#if>

 

使用案例:

public class Demo01 {

public static void main(String[] args) throws Exception {

//1.创建cfg

Configuration cfg=new Configuration(Configuration.VERSION_2_3_22);

cfg.setDirectoryForTemplateLoading(new File("temp"));

cfg.setDefaultEncoding("UTF-8");

cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

 

//2.创建数据模型

Map<String, Object> root=new HashMap<String, Object>();

root.put("user", "nan");

Map<String,Object> latest=new HashMap<String, Object>();

latest.put("url", "prodects.html");

latest.put("name", "green mouse");

root.put("product", latest);

//3.加载模板

Template temp=cfg.getTemplate("test.ftl");

//4.合并模板和数据模型

 Writer out = new OutputStreamWriter(System.out);

     temp.process(root, out);

}

}

Test.ftl:

<html>

<head>

  <title>Welcome!</title>

</head>

<body>

  <h1>Welcome ${user}!</h1>

  <p>Our latest product:

  <a href="${product.url}">${product.name}</a>!

</body>

</html>

 

输出:

<html>

<head>

  <title>Welcome!</title>

</head>

<body>

  <h1>Welcome nan!</h1>

  <p>Our latest product:

  <a href="prodects.html">green mouse</a>!

</body>

</html>

官方汉化文档:http://freemarker.foofun.cn/dgui_quickstart_template.htm

猜你喜欢

转载自blog.csdn.net/qq_39456707/article/details/86620402
今日推荐