Freemarker的使用方法

1、 Freemarker概念

1.1 什么是freemarker

FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

1.2 Freemarker的使用方法

第一步:把freemarker的jar包添加到工程中

第二步:freemarker的运行不依赖web容器,可以在java工程中运行。创建一个测试方法进行测试。

第三步:创建一个Configration对象

第四步:告诉config对象模板文件存放的路径。

第五步:设置config的默认字符集。一般是utf-8

第六步:从config对象中获得模板对象。需要制定一个模板文件的名字。

第七步:创建模板需要的数据集。可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。

第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。

第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。

第十步:关闭writer对象。

1.3 代码实现

public class FreeMarkerTest {

    @Test
    public void testFreeMarker() throws Exception {
        // 第一步:把freemarker的jar包添加到工程中
        // 第二步:freemarker的运行不依赖web容器,可以在java工程中运行。创建一个测试方法进行测试。
        // 第三步:创建一个Configuration对象
        Configuration configuration = new Configuration(Configuration.getVersion());
        // 第四步:告诉config对象模板文件存放的路径。
        configuration.setDirectoryForTemplateLoading(new File("D:\\workspaces-itcast\\JaveEE18\\taotao-portal\\src\\main\\webapp\\WEB-INF\\ftl"));
        // 第五步:设置config的默认字符集。一般是utf-8
        configuration.setDefaultEncoding("utf-8");
        // 第六步:从config对象中获得模板对象。需要制定一个模板文件的名字。
        Template template = configuration.getTemplate("first.ftl");
        // 第七步:创建模板需要的数据集。可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。
        Map root = new HashMap<>();
        root.put("hello", "hello freemarker");
        // 第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。
        Writer out = new FileWriter(new File("D:\\temp\\html\\hello.html"));
        // 第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。
        template.process(root, out);
        // 第十步:关闭writer对象。
        out.flush();
        out.close();
    }
}

模板:

${hello}

2、 Freemarker模板的写法

2.1 取简单数据类型数据

使用EL表达式。

${hello}

2.2 包装数据类型

模板:

<html>
<head>
    <title>${title}</title>
</head>
<body>
    <label>学号:</label>${student.id}<br>
    <label>姓名:</label>${student.name}<br>
    <label>住址:</label>${student.address}<br>
</body>
</html>

2.3 历遍集合/数组

List<Person> persons = new ArrayList<Person>();

省略….

页面中内容

<#list persons as p>

${p.id}/${p.name}

</#list>

2.4 获得当前迭代的索引

List<Person> list = new ArrayList<Person>();

获取当前选代的索引:<br/>
<#list persons as p>
    ${p_index}
</#list>

2.5 模板中判断条件

<#if 判断条件>
<#else>
</#if>

逻辑运算符(==   !=   ||   &&)

2.6 日期类型格式化

默认格式
1:date
${cur_time?date}
2:datetime
${cur_time?datetime}
3:time
${cur_time?time}

自定义格式
${cur_time?string("yyyy-MM-dd HH:mm:ss")} 

2.7 处理null值

root.put(“val”,null);

解决办法
1:null 变 空串
${val!}     ${val!"这里是空"}
2:为Null时给默认值
${val!"我是默认值"}
3、时间类型判断为空<#if curdate ??>
    当前日期:${curdate?string("yyyy/MM/dd HH:mm:ss")}
    <#else>
    curdate属性为null
    </#if>

2.8 Include

将另一个页面引入本页面时可用以下命令完成

<#include "/include/head.html">

3、项目中使用freemarker

使用freemarker整合spring。把Configuration交给spring容器管理。

依赖的jar包:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>

<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>

3.1 Spring配置文件

在Spring中配置Configration对象

<bean id="freemarkerConfig"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
        <property name="defaultEncoding" value="UTF-8" />
</bean>

第一个参数是模板存放路径,第二个字符编码

3.2 静态文件生成的时机

1、当用户第一次访问时生成静态文件。不推荐使用。

原因:高并发的情况下,容易将不完整的静态页面传递给前台用户。

2、当后台添加、编辑商品时生成静态网页。

此时,需要前台系统发布服务,供后台系统调用,当后台添加或者修改商品时调用此服务。此时前台系统的功能就是生成静态页面。

时间: 2024-07-29 13:51:16

Freemarker的使用方法的相关文章

FreeMarker常用的方法

一. Sequence的内置函数 1. sequence?first 返回sequence的第一个值. 2. sequence?last  返回sequence的最后一个值. 3. sequence?reverse 将sequence的现有顺序反转,即倒序排序 4. sequence?size  返回sequence的大小 5. sequence?sort 将sequence中的对象转化为字符串后顺序排序 6. sequence?sort_by(value) 按sequence中对象的属性val

FreeMarker过时的方法 new Configuration()

在使用FreeMarker创建Configuration对象时,提示过期 //freemarker包 Configuration configuration = new Configuration()~; 查看源码发现,通过此方式获得一个Configuration实例,需要一个版本信息 就是说现在你要获得一个 Configuration实例需要一个版本实例,目前我的版本是2.3.23 Use Configuration(Version) instead.Version是一个静态字段 Config

Freemarker的数据模型使用

往模板里可以放任何Java对象,但你要明白你的对象将会被映射成Freemarker的数据模型,所以,你不能再去调用原对象的方法. 例如,你放一个普通的对象MyObject到model里: model.add("myObject", new MyObject()); MyObject类有一个方法sayHello(),在模板中调用该方法是不可以的:${myObject.sayHello()}, 但你可以访问属性,前提是该属性有对应的get方法. 你只能访问Freemarker数据模型的方法

161213、Maven资源替换和Freemarker模板

先介绍一下本文的两位主角: Apache Maven - 正当红的项目管理工具 FreeMarker - 老牌的模板引擎 两者貌似互不相干,何来冲突呢? 原来Maven有一个内置的资源替换机制, 可以对由Maven管理的资源文件进行变量替换. 预定义的Maven属性变量包括${name},${project.version},${project.packaging}和${project.artifactId}等. 熟悉FreeMarker的同学就会发现Maven使用和FreeMarker相同的方

SpringMVC日期类型转换问题三大处理方法归纳

前言 我们在SpringMVC开发中,可能遇到比较多的问题就是前台与后台实体类之间日期转换处理的问题了,说问题也不大,但很多人开发中经常会遇到这个问题,有时很令人头疼,有时间问题暴露的不是很明显,然后逐渐对问题进行跟踪,会发现是日期类型转换失败"映射"不到对应的持久类的日期属性上造成的,由此我还特意写过一篇博文:SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法.感

巧用Freemarker的自定义方法

要想使用Freemarker支持的自定义方法,需要实现freemarker.template.TemplateMethodModel接口,然后将方法对象放入到Freemarker的数据模型中,这样在ftl文件中便可以像使用Freemarker内置方法一样使用该方法了. import java.util.List; import javax.servlet.http.HttpServletResponse; import freemarker.template.TemplateMethodMode

springboot 集成 freemarker

前面我们已经实现了thymeleaf模板,其实freemarker和thymeleaf差不多,都可以取代JSP页面,实现步骤也差不多,我们来简单实现一下 引入pom.xml依赖如下 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> 创

freemarker在web应用项目的使用

FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP.它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等.目前企业中:主要用Freemarker做静态页面或是页面展示. 以下都是网上摘要,感觉很有用,适合初学者了解 Freemarker的使用方法 把freemarker的jar包添加到工程中 <dependency> <groupId>

struts整理

Value注入值,ref注入对象 Jsp实时编译的,freemarker是预编译的 EL表达式只能取session.application.request的值 将String[]转换为List<String> Arrays.<String>alist(数组对象) Struts中上传文件大小不得大于2mb Struts中xml有继承的概念 拦截器方法在action执行前或之后执行,动态代理的原理,ref引用对象 Struts中没有404错误,一般为struts的异常模板,除非转发页面