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\\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、当后台添加、编辑商品时生成静态网页。
此时,需要前台系统发布服务,供后台系统调用,当后台添加或者修改商品时调用此服务。此时前台系统的功能就是生成静态页面。
3.3 整合代码
@Override
public Result genItemHtml(Long itemId) throws Exception {
//商品基本信息
TbItem tbItem = itemService.getItemById(itemId);
//商品描述
String itemDesc = itemService.getItemDescById(itemId);
//规格参数
String itemParam = itemService.getItemParamById(itemId);
//生成静态页面
Configuration configuration = freeMarkerConfigurer.getConfiguration();
Template template = configuration.getTemplate("item.ftl");
//创建一个数据集
Map root = new HashMap<>();
//向数据集中添加属性
root.put("item", tbItem);
root.put("itemDesc", itemDesc);
root.put("itemParam", itemParam);
//创建一个Writer对象
Writer out = new FileWriter(new File(STATIC_PAGE_PATH + itemId + ".html"));
//生成静态文件
template.process(root, out);
out.flush();
out.close();
return Result.ok();
}
3.4 访问配置
可以参考我之前写的
3.5 报错406问题
由于请求的url的后缀为.html,要求返回为一个字符串页面。所以报错
解决方法:不要使用*.html的后缀,配置多个servlet-mapping,拦截其他的后缀,如*.action
注:其实解决方案很多,本文写的这种是生成文件放在硬盘,使用http服务器访问静态文件。还有一种应用很广泛的解决方案,就是类似jsp的配置,实际就是配置一个视图解析器,流程和使用jsp一样,用户在请求这个页面时,将生成的静态页面直接呈现在用户面前,硬盘并不保存这个页面。
Freemarker的使用方法的更多相关文章
- FreeMarker 的使用方法
1.FreeMarker 概述 FreeMarker 是一个用Java语言编写的模板引擎,使用模板来生成文本输出;主要用于做静态页面或页面展示; 2.FreeMarker 使用 // 导入jar包: ...
- 161213、Maven资源替换和Freemarker模板
先介绍一下本文的两位主角: Apache Maven - 正当红的项目管理工具 FreeMarker - 老牌的模板引擎 两者貌似互不相干,何来冲突呢? 原来Maven有一个内置的资源替换机制, 可以 ...
- 巧用Freemarker的自定义方法
要想使用Freemarker支持的自定义方法,需要实现freemarker.template.TemplateMethodModel接口,然后将方法对象放入到Freemarker的数据模型中,这样在f ...
- [转]SpringMVC日期类型转换问题三大处理方法归纳
http://blog.csdn.net/chenleixing/article/details/45190371 前言 我们在SpringMVC开发中,可能遇到比较多的问题就是前台与后台实体类之间日 ...
- SpringMVC日期类型转换问题三大处理方法归纳
方法一:实体类中加日期格式化注解 @DateTimeFormat(pattern = "yyyy-MM-dd") private Date receiveAppTime; 方法二: ...
- freemarker的使用
一:freemarker是什么? freemarker是一个模板引擎,基于定义的模板和数据生成对应的文本(HTML,xml,java等),是一个生成文本的工具. 二:freemarker的使用方法 ( ...
- freemarker是什么东西?
前言 由于考虑到网站访问量,以及tocmat可能承受的最大访问压力,我们需要引进一些比较好的技术,来解决这个问题.所以在项目快要结束之际又收到消息,我们要考虑到这些问题然后对现在的项目进行改进,于是就 ...
- 【转】使用Freemarker实现网页静态化
使用Freemarker实现网页静态化 2017年08月20日 20:45:51 阅读数:1981 1.1. 什么是freemarker FreeMarker是一个用Java语言编写的模板引擎,它基于 ...
- JAVAEE——宜立方商城10:使用freemarker实现网页静态化、ActiveMq同步生成静态网页、Sso单点登录系统分析
1. 学习计划 1.使用freemarker实现网页静态化 2.ActiveMq同步生成静态网页 2. 网页静态化 可以使用Freemarker实现网页静态化. 2.1. 什么是freemarker ...
随机推荐
- 单双引号的区别,defined容易疏忽的小地方
单双引号的区别(面试题) 1.双引号可以解析变量,单引号不行 2.双引号解析转义字符,单引号不解析转义字符.但是单引号能解析 ...
- webpack模块解析
前面的话 在web存在多种支持JavaScript模块化的工具(如requirejs和r.js),这些工具各有优势和限制.webpack基于从这些系统获得的经验教训,并将模块的概念应用于项目中的任何文 ...
- Ubuntu超好用软件:剪贴板
这个软件的作用就是保存你复制或者剪贴的内容 对于经常复制文字的Ubuntu使用者作用还是比较大的 下面附上安装代码 安装: sudo add-apt-repository ppa:shantzu/cl ...
- HDU5723 Abandoned country (最小生成树+深搜回溯法)
Description An abandoned country has n(n≤100000) villages which are numbered from 1 to n. Since aban ...
- Hibernate 中Criteria Query查询详解【转】
当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中.此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询 ...
- Centos 7.3 安装mysql5.7.19 各种调试就不多说了
mysql 5.7.19linux-glibc2.12 (x86_64) 安装 1.在安装目录进行解压2.mv解压目录为mysql3.创建mysql的用户 useradd -s /sbin/nolon ...
- 基于.NET CORE微服务框架 -Api网关服务管理
1.前言 经过10多天的努力,surging 网关已经有了大致的雏形,后面还会持续更新完善,请大家持续关注研发的动态 最近也更新了surging新的版本 更新内容: 1. 扩展Zookeeper封装2 ...
- [vijos NOIP模拟题]天神下凡 贪心+搜索
样例: 考试的时候没时间打了,随便敲了敲就交上去了,没想到竟然编译错误,忘定义n了23333 自己测了测能骗20分hhhh 考虑每个圆对答案的贡献,当一个圆被小圆内切的时候,分成了两半,对答案的贡献就 ...
- 轻松学JVM(二)——内存模型、可见性、指令重排序
上一篇我们介绍了JVM的基本运行流程以及内存结构,对JVM有了初步的认识,这篇文章我们将根据JVM的内存模型探索java当中变量的可见性以及不同的java指令在并发时可能发生的指令重排序的情况. 内存 ...
- YUM安装东西提示PYCURL ERROR 6 - "Couldn't错误的解决办法
执行yum install命令时提示PYCURL ERROR 6 - "Couldn't resolve host 错误,原来是dns设置出错,具体错误代码: Loaded plugins ...