- FreeMarker
- 概述
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
HTML静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以使用FreeMarker将动态页面静态化。
-
- 工作原理
- 工作原理
模板:就是一份已经写好了基本内容,有着固定格式的文档,其中空出或者用占位符标识的内容,由使用者来填充,不同的使用者给出的数据是不同的。在模板中的占位符,在模板运行时,由模板引擎来解析模板,并采用动态数据替换占位符部分的内容。
FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成Html,XML,JSP或Java 等文件。
-
- 优缺点
- 优点
- FreeMarker不支持Java脚本代码;所以可以彻底的分离表现层和业务逻辑;
- 提高开发效率。开发过程中,界面设计和开发人员可以并行工作;不必等待完成页面原形后,再开发程序;
- 开发过程中的人员分工更加明确。使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及Web页面的其他可视化方面,不用理会数据;而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。
- 缺点
- 生成静态的HTML页面后,数据更新可能不及时;
- 需要学习FreeMarker模版语言。而且FreeMarker中的变量必须要赋值,如果不赋值,那么就会抛出异常。想避免错误就要应用if/elseif/else 指令进行判断,如果对每一个变量都判断的话,那么则反而增加了编程的麻烦。FreeMarker的map限定key必须是string,其他数据类型无法操作。
- 下载
- 官方网站 http://freemarker.apache.org/
- 下载地址
http://archive.apache.org/dist/incubator/freemarker/engine/ 新版本下载
https://sourceforge.net/projects/freemarker/files/freemarker/ 旧版本下载
apache-freemarker-2.3.26-incubating-bin.tar.gz (2017-03-16)
- 第一个FreeMarker例子
- 搭建maven项目
搭建java项目即可。FreeMarker的依赖坐标为:
<!-- freemarker --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.26-incubating</version> </dependency> |
pom.xml的内容为:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.itcast</groupId> <artifactId>freemarker_test</artifactId> <version>0.0.1-SNAPSHOT</version>
<!-- 配置依赖关系 --> <dependencies> <!-- junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- freemarker --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.26-incubating</version> </dependency>
</dependencies>
<!-- 构建部分 --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>utf-8</encoding> </configuration> </plugin> </plugins> </build> </project> |
-
- 定义ftl模版
<!DOCTYPE html> <html> <head> <title>freemarker</title> <meta charset="UTF-8"/> <meta http-equiv="pragma" content="no-cache"/> </head> <body> ${msg} </body> </html> |
-
- 控制台输出
/** 控制台输出 */ @Test public void test01() throws Exception { /** 创建Configuration配置信息对象,需要指定版本号 */ Configuration configuration = new Configuration(Configuration.VERSION_2_3_26); /** 通过Configuration设置模版文件的基础路径 */ configuration.setClassForTemplateLoading(FreeMarkerTest01.class, "/ftl"); |