freemark基础知识
前言:使用freemarker对应生成一个html文件,保存到磁盘,访问文件就不一定使用tomcat,可以使用nginx(http服务器)访问。可以使用freemaker工具生成。只生成一次,html静态页面是实实在在存在磁盘上了。
一、 什么是freemarker
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
二、 Freemarker的使用方法
第一步:把freemarker的jar包添加到工程中
第二步:freemarker的运行不依赖web容器,可以在java工程中运行。创建一个测试方法进行测试。
第三步:创建一个Configration对象
第四步:告诉config对象模板文件存放的路径。
第五步:设置config的默认字符集。一般是utf-8
第六步:从config对象中获得模板对象。需要指定一个模板文件的名字。
第七步:创建模板需要的数据集。数据集可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。
第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。
第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。
第十步:关闭writer对象。
代码实现(数据源)
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}
三、Freemarker模板的写法
1、取简单数据类型数据
使用EL表达式。
${hello}
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> |
3、 历遍集合/数组
List<Person> persons = new ArrayList<Person>();
省略….
页面中内容
<#list persons as p> 数据集(persons) 对象(p)
${p.id}/${p.name}
</#list>
4、 获得当前迭代的索引(循环中取下标)
List<Person> list = new ArrayList<Person>();
获取当前选代的索引:<br/>
<#list persons as p>
${p_index} // p_index取下标
</#list>
5、 模板中判断条件
<#if 判断条件>
<#else>
</#if>
逻辑运算符(== != || &&)
6、日期类型格式化
默认格式
1:date 生成的日期格式1
${cur_time?date} ?date告诉freemarker要生成的日期格式
2:datetime 生成的日期格式2
${cur_time?datetime}
3:time 生成的日期格式3
${cur_time?time}
自定义格式
${cur_time?string("yyyy-MM-dd HH:mm:ss")}
7、 处理null值
root.put(“val”,null);
解决办法
1:null 变空串
${val!} ${val!"这里是空"} !后面是默认值 加上!可以处理title为空值的情况 为了日后能理解 可以使用“”,在里面添加说明文字
2:为Null时给默认值
${val!“我是默认值"}
3、如果日期为空<#if curdate ??> ??代表满足的情况下
当前日期:${curdate?string("yyyy/MM/dd HH:mm:ss")}
<#else>
curdate属性为null
</#if>
8、Include
将另一个页面引入本页面时可用以下命令完成,.ftl并不是必须的,只要能把文件引入就行,这样显规范
<#include "/include/head.html">
三、项目中使用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>
1.2.1 Spring配置文件
<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> |
freemark基础知识的更多相关文章
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- selenium自动化基础知识
什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(三) - 聚合和排序
SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...
- [SQL] SQL 基础知识梳理(四) - 数据更新
SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(五) - 复杂查询
SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...
随机推荐
- hadoop的第一个hello world程序(wordcount)
在hadoop生态中,wordcount是hadoop世界的第一个hello world程序. wordcount程序是用于对文本中出现的词计数,从而得到词频,本例中的词以空格分隔. 关于mapper ...
- [洛谷P4081][USACO17DEC]Standing Out from the Herd
题目大意:给你$n$个字符串,对每个字符串求出只在这个字符串中出现的字串的个数 题解:先建广义$SAM$,然后对每个点统计一下它的子树中是不是都是在同一个字符串中的,是的话,就把这个点标成这一个字符串 ...
- BZOJ2761 不重复的数字 【treap】
2761: [JLOI2011]不重复数字 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 5517 Solved: 2087 [Submit][S ...
- Jsp电子商务之七 订单篇2
从View页面,点击超链接查询订单,进入到控制器 OrderlistServlet package com.cart.web; import java.io.IOException; import j ...
- requireJs使用方法项目实例
首先,定义 main.js 和 事件处理的公共 js main.js 主要是定义引用名称和路径的对应关系 事件绑定模块: 写jsp页面: jsp中先引入 require.js 和 main.js 然 ...
- MyEclipse安装FreeMarker插件
MyEclipce8.6中安装FreeMarker插件,这绝对是最简单的方法. 步骤如下: (一)打开http://sourceforge.net/projects/freemarker- ...
- mysql的IFNULL()函数FLOOR(),ROUND()函数
用法说明 1 IFNULL(expr1,expr2) 如果 expr1 不是 NULL,IFNULL() 返回 expr1,否则它返回 expr2. IFNULL()返回一个数字或字符串值,取决于它被 ...
- C#学习目录处理
目录获取和处理: string path = ".";//表明要在当前所在的目录 //先定义目录信息变量 DirectoryInfo dir = new DirectoryInfo ...
- 基于jQuery UI的调色板插件推荐colorpicker
1.下载地址 点击网页最下端Download,即可下载 2.使用方法 本插件是基于jQuery UI,所以应该先行下载jQuery UI,当然jQuery也必不可少 引入和初始化 引入js文件 & ...
- window10系统下使用python版本实现mysql查询
参考文档: 兔大侠整理的MySQL-Python(MySQLdb)封装类 Python安装模块出错(ImportError: No module named setuptools)解决方法 环境 (w ...