freemarker使用场景
1.并发量高
2.单纯使用redis不能满足需求
目前企业中主要用Freemarker做静态页面或是页面展示
freemarker是java语言编写的模板引擎,与web容器无关
freemarker原理图
FreeMarker语法
- 1.访问对象
${person.id}
2.访问list
list <#list persons as p>
${p.id}/${p.name}
</#list>
3.获取当前选代的索引:
<#list persons as p>
${p_index}
</#list>
4.if
<#list persons as p>
<#if p_index%2 != 0 || p_index==0>
<span style="color:red">
index:${p_index}|${p.id}:${p.name}<br>
</span>
<#else>
<span style="color:blue">
index:${p_index}|${p.id}:${p.name}<br>
</span>
</#if>
</#list>
5.日期类型
默认格式 1:date ${key?date}
2:datetime ${key?datetime}
3:time ${key?time}
自定义格式 ${key?string("yyyy-MM-dd HH:mm:ss")}
6.null处理
1.${val!}
2.${val!默认值}
3.<#if curdate ??> 属性不为空 <#else> 属性为空 <#/if>
7.include
<#include "/include/head.html">
Spring整合freemarker步骤
1.添加Maven依赖
<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>
2.配置bean
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<property name="defaultEncoding" value="UTF-8" /> </bean>
3.写模板
4.写Controller
@Controller
public class HtmlGenController {
@Autowired
private FreeMarkerConfig freeMarkerConfig;
@RequestMapping("/genhtml")
@ResponseBody
public String genHtml() throws Exception {
// 生成静态页面
Configuration configuration = freeMarkerConfig.getConfiguration();
Template template = configuration.getTemplate("hello.ftl");
Map data = new HashMap<>();
data.put("hello", "hello freemarker");
Writer out = new FileWriter(new File("G:/freemarker/out/test.html"));
template.process(data, out);
out.close();
// 返回结果
return "OK";
}
}
运行后生成静态test.html文件