What is Freemarker?
FreeMarker是一个基于Java的模板引擎,最初专注于使用MVC软件架构生成动态网页。但是,它是一个通用的模板引擎,不依赖于servlets或HTTP或HTML,因此它通常用于生成源代码,配置文件或电子邮件。( from wikipedia.org)
官方网站:http://freemarker.org/
How to use Freemarker?
本文中会介绍 Freemarker 在 JavaWeb 中作为视图展示的用法(类似于JSP的功能),后面有机会可以介绍一下使用这种模板引擎技术做代码生成工具或是在电子邮件功能上的使用。
正文
最开始我们准备好我们的第一个 Freemarker 模板 在WEB-INF 下建 templates 文件夹,然后创建 test.ftl 模板
<html>
<head>
<title>freemarker Test</title>
</head>
<body>
<h1>Hello,${name}</h1>
</body>
</html>
接着引入依赖
<properties>
<spring.version>4.3.6.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
配置 web.xml (添加SpringMVC过滤器 拦截所有请求,略)
然后在 Spring 配置文件中添加 Freemarker视图解析器
<!-- FreeMarker模板路径 -->
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="freemarkerSettings" ref="freemarkerConfiguration" />
<property name="templateLoaderPath">
<value>/WEB-INF/templates</value>
</property>
<property name="freemarkerVariables">
<map>
<entry key="xml_escape" value-ref="fmXmlEscape" />
</map>
</property>
<property name="defaultEncoding">
<value>utf-8</value>
</property>
</bean>
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" />
<!-- 配置freeMarker视图解析器 -->
<bean
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
<property name="contentType" value="text/html; charset=utf-8" />
<property name="suffix" value=".ftl" />
<property name="order" value="0" />
</bean>
最后我们写一个视图控制器用来访问 test.ftl
@Controller
@RequestMapping(value="hello")
public class FirstViewController {
@RequestMapping(value = "test.html", method = RequestMethod.GET)
public String index(String name,Model model) {
model.addAttribute("message", "hello");
model.addAttribute("name", name);
return "/test";
}
}