一、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
<version>2.1.10.RELEASE</version>
</dependency>
二、yml配置
#freemarker相关配置属性
spring:
freemarker:
allow-request-override: false
allow-session-override: false
cache: true
template_update_delay: 60000
charset: UTF-8
check-template-location: true
content-type: text/html
template-loader-path: classpath:/templet/
suffix: .ftl
enabled: true
expose-spring-macro-helpers: true
在springboot yml文件中增加springboot的配置,其中template-loader-path的配置是freemarker文件的加载路径,suffix表示以.ftl结尾的文件。
三、在resources目录下创建一个ftl文件
在resources目录下创建一个templet目录,按照上一步配置的路径。
在目录下创建一个createHtml.ftl文件,这个就是我们要生成的静态html文件的模版,基本的freemarker语法,可以网上了解一下,这里贴部分样例
<#if list.futureList??>
<li class="li_title"> <span bgcolor="#ff6600" align="center" style="width: 100%;"><span
style="color:#ffffff;"><strong>这里是个标题</strong></span></span>
</li>
<#list list.futureList as zst >
<#assign isNew = (zst.isNew)?string('true','false') />
<#assign isHot = (zst.isHot)?string('true','false') />
<li class="li_list" onmouseover="this.style.backgroundColor='#F3F3F3'"
onmouseout="this.style.backgroundColor='#ffffff'" style="background-color:#ffffff;" align="center"
VerTypeID="${zst.verTypeIdStr}" AuthYear="${zst.userCrown}">
<span><a href="${zst.gameWeb!}" target="_blank">${zst.groupName!}
<#if zst.isYellow=='1'>
<#if isNew='true'>
<img src="images/new.gif" class="hotpic" />
<#else >
<img src="images/hot.gif" class="hotpic" />
</#if>
<#elseif isNew='true'>
<img src="images/new.gif" class="hotpic" />
<#elseif isHot='true'>
<img src="images/hot.gif" class="hotpic" />
</#if>
<#if zst.userCrown gte 1>
<img title="${zst.userCrown}!" src="images/crown_${zst.userCrown}.png" />
</#if>
</a></span>
<span title="██${zst.gameName}██" class="serverName" type="pcm"><a href="${zst.gameWeb!}"
target="_blank">${zst.gameName}</a><img class='pc' src='https://image-storage.oss-cn-hangzhou.aliyuncs.com/image/zst/pc_m(2).png' border='0' style="width:17px; height:15px; left:137px;"/></span>
<span style="color:red">${zst.startTime}</span>
<span title="${zst.gameDesc}">${zst.gameDesc}</span>
<span><a href="javascript:;"
onclick="StarGmae(this,'${zst.dlqDownAddr}','${zst.gameWeb!}','','','start')"
class="pn pnc" style="padding:5px;"><span>按钮</span></a></span>
<span><a href="${zst.gameWeb!}" target="_blank" class="pn pnd" style="padding:5px;"
onclick="_czc.push(['_trackEvent', '点击', '进入GM游戏官网', '游戏网站','5','dianji']);"><span>点击查看</span></a></span>
</li>
</#list>
</#if>
接下来我们要做的就是如何把数据传进来。
四、往模版传入数据
/**
* freemarker配置 可以读取我们在yml中的配置,比如模版文件的路径,
*/
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
@Override
public boolean createHtml(String outputPath) {
Configuration cfg = freeMarkerConfigurer.getConfiguration();
Writer out = null;
File file = new File(outputPath);
try {
// ZstServerBO bo=new ArrayList<>();
// List<T> list = null; 这里是获取你要插入模版的数据
cfg.setDefaultEncoding(StandardCharsets.UTF_8.name());
Template template = cfg.getTemplate("createHtml.ftl");
out = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8);
//将数据放在map里,然后就会自动渲染模版,忘你制定的路径生成一个html文件
Map<String, Object> map = new HashMap<>();
map.put("zstlist", bo);
map.put("verTypeList", list);
template.process(map,out);
logger.info("生成静态html,路径:{}",outputPath);
return true;
} catch (Exception e) {
logger.error("生成html静态文件失败",e);
}finally {
if (out != null) {
try {
out.flush();
out.close();
} catch (IOException e) {
logger.error("流关闭失败",e);
}
}
}
return false;
}